概念评估能否取决于在哪里进行评估?

时间:2018-11-12 10:21:14

标签: 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;

这个问题之后是这个one

1 个答案:

答案 0 :(得分:8)

  

概念评估可以取决于评估的地方吗?

是的。在将概念合并到工作草案中的核心措词审核中明确讨论了这一点。每次都会对概念进行重新评估。

结果是:

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

struct A;
static_assert(!Complete<A>);
struct A {};
static_assert(Complete<A>);   

格式正确。换句话说,我们不会像“记忆”模板实例化那样“记忆”概念。