Может ли оценка концепции зависеть от того, где она оценивается? - PullRequest
0 голосов
/ 12 ноября 2018

[temp.concept] / 5 говорит:

Концепция не реализована ([temp.spec]). [Примечание: id-выражение, обозначающее специализацию концепта, оценивается как выражение ([expr.prim.id]). [...]]

Означает ли это, что это правило ниже ( [temp.point] / 8 ) не применяется?

Если две разные точки инстанцирования придают специализации шаблона разные значения в соответствии с правилом единого определения, программа некорректна, диагностика не требуется.


Например, если это правило не применяется, приведенный ниже код является правильным:

template<class T>
concept Complete = sizeof(T)==sizeof(T);

struct A;

constexpr inline bool b1 = Complete<A>; //Complete<A>==false;

struct A{};

constexpr inline bool b2 = Complete<A>; //Complete<A>==true;

За этим вопросом следует этот один

1 Ответ

0 голосов
/ 12 ноября 2018

Может ли оценка концепции зависеть от того, где она оценивается?

Да. Это было явно обсуждено во время обзора основных формулировок при объединении концепций в рабочий проект. Концепция пересматривается каждый раз.

В результате это:

template<class T>
concept Complete = sizeof(T) == sizeof(T);

struct A;
static_assert(!Complete<A>);
struct A {};
static_assert(Complete<A>);   

правильно сформирован. Другими словами, мы не «запоминаем» понятия так же, как «запоминаем» экземпляры шаблона.

...