Скопировать конструктор с невозможными требуемыми конструированиемC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Скопировать конструктор с невозможными требуемыми конструированием

Сообщение Anonymous »

В следующей программе конструктор копирования struct s объявляется с ограничением того, что класс не подходит для копирования:

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

#include 

template 
struct S {
S() = default;
S(const S &) requires (!std::copy_constructible) {}
};

S u;
S v(u); //copy construction

static_assert( !std::copy_constructible );
< /code>
Я ожидал, что программа потерпит неудачу с ошибкой, что -то вроде «удовлетворенности ограничения зависит от себя». И действительно, MSVC не удается, но с довольно неясным сообщением об ошибке: < /p>
(6): error C7608: atomic constraint should be a constant expression
(6): note: the template instantiation context (the oldest one first) is
(6): note: while evaluating concept 'copy_constructible'
Z:/compilers/msvc/14.40.33807-14.40.33811.0/include\concepts(170): note: while evaluating concept 'move_constructible'
Z:/compilers/msvc/14.40.33807-14.40.33811.0/include\concepts(105): note: while evaluating concept 'constructible_from'
(6): error C2131: expression did not evaluate to a constant
(6): note: failure was caused by a read of an uninitialized symbol
(6): note: see usage of 'std::copy_constructible'
Но, как GCC, так и Clang успешно создают программу без каких -либо предупреждений.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... constraint
Ответить

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

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

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

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

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