C++ 为什么C++;概念和概念?

C++ 为什么C++;概念和概念?,c++,c++-concepts,c++-ts,C++,C++ Concepts,C++ Ts,我一直在看GCC6中正在实现的C++1z概念TS草案,我不理解拥有两种不同类型的概念的目的:变量概念和函数概念 功能概念草案的相关部分为[dcl.spec.concept(5.4)] 声明应有一个相当于{return E;}的函数体,其中E是一个约束表达式(14.10.1.3) 对于可变概念,在下一段[(6.3)]: 初始值设定项应为约束表达式 他们中的一个能做什么,而另一个不能?如果没有,是否有理由将两者都包括在内 注意:最新草案在这方面没有任何改变函数概念可以在不同的模板参数上重载。

我一直在看GCC6中正在实现的C++1z概念TS草案,我不理解拥有两种不同类型的概念的目的:变量概念和函数概念

功能概念草案的相关部分为[dcl.spec.concept(5.4)]

  • 声明应有一个相当于
    {return E;}
    的函数体,其中
    E
    是一个约束表达式(14.10.1.3)
对于可变概念,在下一段[(6.3)]:

  • 初始值设定项应为约束表达式
他们中的一个能做什么,而另一个不能?如果没有,是否有理由将两者都包括在内


注意:最新草案在这方面没有任何改变

函数概念可以在不同的模板参数上重载。变量概念提供函数概念没有的功能,除了在某些上下文中不放置
()
的功能


从TS中删除变量概念不会降低概念的表达能力。

注意:概念不会出现在C++17中,这是本周早些时候宣布的。感谢大家的提醒,我没有注意到这一点。如果有人想知道的话,Tom Honermann的答案很有用。几分钟后,我在Tom Honermann的答案中找到了这个答案:)有点相关:在D中,如果编译器可以推断正在进行函数调用,可以省略括号。这使得长管道更加简洁:
container.transform(v).reverse.print而不是
reverse()
print()
。如果C++中有可能,那么变量模板将提供更少的概念。