函数概念return类型(必须是bool)

Function concept return type (must be bool)

此页面 http://en.cppreference.com/w/cpp/language/constraints 表示函数概念的 return 类型必须是 bool。如果这里只有一个选项,那么要求首先指定 return 类型的基本原理是什么?

为什么不使用类似这样的语法:

template <typename T>
concept DumbConcept() {
   return requires( T a,T b ) {
      requires std::is_same<decltype(a+b),bool>::value;
   };
}

If there is only one option here, what is the rationale behind requiring a return type to be specified in the first place?

因为它是一个函数,而函数有 return 类型。不,真的,这就是它的理由。

C++98 的原始概念提议在很大程度上失败了,因为它试图做的事情太多。因此,Concepts-lite 提案从绝对最小可行功能开始:一种约束模板的方法,以及一种定义约束的方法。但是作为一个最小可行的特征,requires 子句并不局限于概念;它可以(并且仍然可以)接受任何常量表达式,而不仅仅是一个概念。

因此,"concept" 只是一个花哨的常量表达式,可以以某些特殊方式使用。概念需要能够成为模板,并且它们需要能够评估表达式。由于 C++11/14 没有变量模板,当时 "concept" 定义的最小可行功能解决方案是使其成为 constexpr 函数。实际上,concepts-lite 功能的 1.0 版甚至没有 concept 作为关键字; a "concept" was just any constexpr function that returned bool.

显然,概念设计从那里发生了重大变化。

C++20 中采用的概念版本不包含函数概念。而且他们也没有包括变量概念的 bool 部分。因为,正如您指出的那样,它是多余的。