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

[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

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

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

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

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

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

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