Может ли оценка концепции зависеть от того, где она оценивается?
[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>);
хорошо сформирован. Другими словами, мы не "запоминаем" понятия так же, как "запоминаем" экземпляры шаблона.