Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否允许(或将允许)在lambda表达式中使用熟悉的模板语法?_C++_Lambda_Language Lawyer_C++14 - Fatal编程技术网

C++ 是否允许(或将允许)在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),因此出现了一些问题: 这是一个执行问题吗 是什么阻止了这部分被接受 哪一个方案最终将通用

C++14引入了通用lambdas。在浏览费萨尔·瓦利、赫伯·萨特和戴夫·亚伯拉罕的相关提案时,我发现了这些提案。 其中第2.2节的标题为:

2.2允许在lambda表达式中使用熟悉的模板语法

下面的代码示例包括这样的代码片段

[]<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