C++ 是否允许(或将允许)在lambda表达式中使用熟悉的模板语法?
C++14引入了通用lambdas。在浏览费萨尔·瓦利、赫伯·萨特和戴夫·亚伯拉罕的相关提案时,我发现了这些提案。 其中第2.2节的标题为: 2.2允许在lambda表达式中使用熟悉的模板语法 下面的代码示例包括这样的代码片段C++ 是否允许(或将允许)在lambda表达式中使用熟悉的模板语法?,c++,lambda,language-lawyer,c++14,C++,Lambda,Language Lawyer,C++14,C++14引入了通用lambdas。在浏览费萨尔·瓦利、赫伯·萨特和戴夫·亚伯拉罕的相关提案时,我发现了这些提案。 其中第2.2节的标题为: 2.2允许在lambda表达式中使用熟悉的模板语法 下面的代码示例包括这样的代码片段 []<int N>(int (&a)[N]) {} [](int&a)[N]){ 由于这些东西无法编译(使用gcc、clang和Visual Studio),因此出现了一些问题: 这是一个执行问题吗 是什么阻止了这部分被接受 哪一个方案最终将通用
[]<int N>(int (&a)[N]) {}
[](int&a)[N]){
由于这些东西无法编译(使用gcc、clang和Visual Studio),因此出现了一些问题:
- 这是一个执行问题吗李>
- 是什么阻止了这部分被接受李>
- 哪一个方案最终将通用lambda引入语言李>
auto foo = []<int N>(int (&a)[N]) {};
但是,使用
g++-4.8
或clang-3.6
都会失败。因此,我认为这是一个执行问题。但是,我对C++14标准不太熟悉,不知道为什么/是否接受它(例如,支持它的g++4.9可能是非标准的) 被接受的论文版本是N3649
,我们可以通过进入进化工作组(EWG)来了解这一点:
由EWG于2012年在波特兰审查,继续后续文件
2013年布里斯托尔工作草案接受,为N3649
布里斯托尔2013:不要在N3560中重新打开提案2.1和2.2,它们是
被认为是NAD。提案2.3和2.4包含在N3649中
请注意,本建议书将2.1
和2.2
作为NAD(非缺陷)引用,并且不会重新打开<代码>N3560从作为主要提案的N3418
中分离出来,而N3560
中的提案2.1
是:
允许在lambda表达式中使用熟悉的模板语法
该文件指出,提案2.1
被认为是有争议的:
我们承认支持完整的模板参数列表功能
被认为是有争议的(波特兰2012年民意测验结果)
由少数委员会成员提供:7 SF、5 F、3 N、1 A、1 SA),以及
因此,在本小节结束时,引用委员会的一些话
在EWG讨论以下问题时不在场的成员:
这是波特兰的特色
我们可以看到,其中不包含此提案。我从报纸N3560
中的引用中猜测:
"
我想我们需要的不仅仅是
汽车。我不知道还有多少,但我认为只有汽车太有限了
“
汽车最终被认为是足够的,这与说提案是
NAD
相一致,这意味着它试图解决的问题不是真正的问题。@NikosAthanasiou哇,修正了这个问题。这是一个重要的链接,因为它链接到了我提到的其他论文。我认为@forkrul提到的gcc4.9j实现的行为是一个扩展。Thnx为了更彻底,基于这个答案,我添加了语言律师标签。@Nikosathanasi您可能是在假设它会被接受的情况下实现的,我已经看过几次了。另请参见:
g++-4.9 -c foo.cpp -std=c++1y