Constexpr-if с std::is_copy_assignableC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Constexpr-if с std::is_copy_assignable

Сообщение Гость »


Почему следующий код не компилируется? Статическое утверждение проверяет, что Foo не подлежит копированию, поэтому я ожидаю, что компилятор отбросит код в блоке constexpr-if, но это не так.

Код: Выделить всё

#include 

struct Foo {
Foo() = default;
Foo const& operator=(Foo const&) = delete;
};

int main()
{
static_assert(!std::is_copy_assignable_v);

Foo x;
Foo other;
if constexpr (std::is_copy_assignable_v) {
other = x;
}
return 0;
}
Ошибка компилятора:

Код: Выделить всё

: In function 'int main()':
:16:17: error: use of deleted function 'const Foo& Foo::operator=(const Foo&)'
16 |         other = x;
|                 ^
:5:16: note: declared here
5 |     Foo const& operator=(Foo const&) = delete;
|                ^~~~~~~~
Compiler returned: 1
https://godbolt.org/z/nxf4dEhWP


Источник: https://stackoverflow.com/questions/781 ... assignable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»