Программы на C++. Форум разработчиков
Гость
Constexpr-if с std::is_copy_assignable
Сообщение
Гость » 13 мар 2024, 19:17
Почему следующий код не компилируется? Статическое утверждение проверяет, что 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
1710346665
Гость
Почему следующий код не компилируется? Статическое утверждение проверяет, что Foo не подлежит копированию, поэтому я ожидаю, что компилятор отбросит код в блоке constexpr-if, но это не так. [code]#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; } [/code] Ошибка компилятора: [code]: 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 [/code] https://godbolt.org/z/nxf4dEhWP Источник: [url]https://stackoverflow.com/questions/78155054/constexpr-if-with-stdis-copy-assignable[/url]