概念评估能否取决于评估的位置?

Oli*_*liv 16 c++ language-lawyer c++-concepts c++20

[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;
Run Code Online (Sandbox Code Playgroud)

这个问题是后面这一个

Bar*_*rry 9

概念评估能否取决于评估的位置?

是.在将概念合并到工作草案中时,在核心措辞审查期间明确讨论了这一点.每次都要重新评估这个概念.

结果,这个:

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

struct A;
static_assert(!Complete<A>);
struct A {};
static_assert(Complete<A>);   
Run Code Online (Sandbox Code Playgroud)

结构良好.换句话说,我们不会以"memoize"模板实例化的方式"memoize"概念.