Должно ли замененное выражение ограничения, которое не является константным выражением, привести к серьезной ошибке?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Должно ли замененное выражение ограничения, которое не является константным выражением, привести к серьезной ошибке?

Сообщение Anonymous »

Выражение T::b, где T = a, невозможно разрешить, поскольку
b является нестатическим членом . Должно ли формирование
такого недопустимого выражения привести к тому, что
выражение require c будет оценено как false?
Или это должно привести к жесткому -ошибка вместо этого? И если да, то почему?
template
concept c = (bool)T::b;

struct a { bool b; };

static_assert(not c); // #1 - clang ok, gcc nope, msvc ok

При изменении выражения на (T::b, true), где T = a,
даже GCC больше не рассматривает его как жесткое -ошибка. Но не следует
T::b по-прежнему будет оцениваться независимо от того, отброшен ли результат
указанного выражения? Ошибочно ли GCC оценивать
выражение require как истинное, когда T::b не является
константным выражением?
template
concept d = (T::b, true);

static_assert(not d); // #2 - clang ok, gcc nope, msvc ok

Демо

Сообщение об ошибке GCC:
:2:9: required by the constraints of 'template concept c'
:2:22: error: '*(a*)(void)0' is not a constant expression
2 | concept c = (bool)T::b;
| ^
:2:9: required by the constraints of 'template concept c'
:2:22: error: '*(a*)(void)0' is not a constant expression
:6:15: error: non-constant condition for static assertion
6 | static_assert(not c);
| ^~~~~~~~
:2:9: required by the constraints of 'template concept c'
:2:22: error: '*(a*)(void)0' is not a constant expression
2 | concept c = (bool)T::b;
| ^


Подробнее здесь: https://stackoverflow.com/questions/793 ... ession-res
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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