Oli*_*liv 16 c++ language-lawyer c++-concepts c++20
概念未实例化([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)
这个问题是后面这一个
概念评估能否取决于评估的位置?
是.在将概念合并到工作草案中时,在核心措辞审查期间明确讨论了这一点.每次都要重新评估这个概念.
结果,这个:
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"概念.