此页面http://en.cppreference.com/w/cpp/language/constraints表示函数概念的返回类型必须为bool。如果这里只有一个选项,那么首先要求返回类型的理由是什么?
为什么不选择这样的语法:
template <typename T>
concept DumbConcept() {
return requires( T a,T b ) {
requires std::is_same<decltype(a+b),bool>::value;
};
}
答案 0 :(得分:3)
如果这里只有一个选项,那么首先要求返回类型的理由是什么?
因为它是一个函数,函数有返回类型。不,真的,这就是它的理由。
C ++ 98的原始概念提案在很大程度上失败了,因为它试图做得太多。因此,Concepts-lite提议始于绝对最小可行特征:约束模板的方法和定义约束的方法。但作为最小可行特征,requires
条款不仅限于概念;它可以(并且仍然可以)接受任何常量表达,而不仅仅是一个概念。
因此,“概念”只是一种奇特的常量表达,可以用于某些特殊的方式。概念需要能够成为模板,并且他们需要能够评估表达式。由于C ++ 11/14没有可变模板,因此当时“概念”定义的最小可行特征解决方案是使其成为constexpr
函数。实际上,概念-lite功能的1.0版本甚至没有concept
作为关键字; a "concept" was just any constexpr
function that returned bool
显然,设计概念从那里发展得很明显。
C ++ 20中采用的概念版本不包括函数概念。而且它们也没有包含变量概念的bool
部分。因为,正如你所指出的那样,这是多余的。