Этот вопрос является продолжением этого один
[temp.concept] / 5 говорит:
Концепция не реализована ([temp.spec]).[Примечание: id-выражение, обозначающее специализацию концепта, оценивается как выражение ([expr.prim.id]).[...]]
Так что, возможно, выражение, называющее специализацию концепции, может иметь различное значение из-за доступности.
Если бы это было так, мне интересно, в каком контекстеОценивается выражение:
Контекст определения понятия;
Контекст выражения;
Контекст выражения, рекурсивно применяемый к выражению понятий, появляющемуся в определении понятий?
Например, какое может быть значение для A::b2
и A::b2_rec
?
template<class T>
concept has_private = requires(){ &T::private_;};
template<class T>
concept has_private_rec = has_private<T>;
class B{
int private_;
friend class A;
};
inline constexpr bool b1 = has_private<B>;//I expects false
inline constexpr bool b1_rec = has_private_rec<B>;//I expects false
class A{
static constexpr bool b2 = has_private<B>; //?
static constexpr bool b2_rec = has_private_rec<B>; //?
};
Примечание. Экспериментальные концепции Clang и концепции gcc Реализация TS приводит к ошибке компиляции для b1 и b1_rec, но b2 и b2_rec верны;