功能概念返回类型(必须是bool)

时间:2017-10-24 06:17:26

标签: c++ c++-concepts c++20

此页面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;
   };
}

1 个答案:

答案 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部分。因为,正如你所指出的那样,这是多余的。