考虑以下代码:
#include#include template concept bool C1 = std::is_same ::value; template concept bool C2 = C1 () + std::declval ())>; struct A {}; int main() { std::cout << C2 ; std::cout << C2; return 0; }
GCC编译得很好并打印10.
但§14.10.1.2谓词约束[temp.constr.pred]的N4553说
谓词约束是一个约束,用于计算常量表达式E(5.19).
然后
替换后,E应具有bool类型.
由于C1
替换失败,而不是类型bool,这是否意味着该程序应该是格式错误的?