2

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

1 回答 1

3

如果这里只有一个选项,那么首先需要指定返回类型的理由是什么?

因为它是一个函数并且函数具有返回类型。不,真的,那是它的理由。

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

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

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

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

于 2017-11-04T01:56:57.947 回答