[温度概念]/5 http://eel.is/c++draft/temp.concept#5.sentence-1 says:
概念未实例化([temp.spec])。
[ 注:表示概念专门化的 id 表达式被计算为表达式 ([expr.prim.id])。 [...]]
这是否意味着这条规则如下([温度点]/8 http://eel.is/c++draft/temp.res#temp.point-8.sentence-4) 不适用?
如果根据单一定义规则,两个不同的实例化点赋予模板专门化不同的含义,则该程序是格式错误的,无需诊断。
例如,如果此规则不适用,则以下代码格式良好:
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;
This question is followed by this one https://stackoverflow.com/q/53263299/5632316
概念评估是否可以取决于评估地点?
No.
过去的情况是这样的(正如我在这次编辑之前的回答所述),但事实证明,这严重抑制了编译器的吞吐量(因为您无法缓存概念检查的结果)以及开始它的动机与相当弱。这是一个非常晚的变化,作为P2104 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2104r0.html在 2020 年布拉格会议上,在 [temp.constr.atomic] 中添加了以下句子:
如果在程序的不同点,对于相同的原子约束和模板参数,满足结果不同,则该程序是格式错误的,不需要诊断。
结果是:
template<class T>
concept Complete = sizeof(T) == sizeof(T);
struct A;
static_assert(!Complete<A>);
struct A {};
static_assert(Complete<A>);
格式不正确,NDR(实际上,Complete<A>
仍将是false
after A
就完成了)。换句话说,我们“记忆”概念的方式与“记忆”模板实例化的方式相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)