В каком контексте контроля доступа оцениваются концепции? - PullRequest
0 голосов
/ 12 ноября 2018

Этот вопрос является продолжением этого один

[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 верны;

...