【发布时间】:2017-02-25 22:47:07
【问题描述】:
我试图弄清楚为什么 clang 不编译这段代码:
#include <vector>
#include <iostream>
int main() {
auto lambda = [](const std::vector<auto>& x){
std::cout << x.front() << x.back() << std::endl;
};
lambda(std::vector<int>(1,1));
}
根据这篇文章auto in pair,C++14 标准不允许这样做,但我找不到任何支持它的资源。
我对标准各个部分的理解是,应该允许这个特性(第 5.1.2 章第 5 节表明每个 auto 都被转换为模板参数,与精确定位无关
(引用:consists of one invented type template-parameter for each occurrence of auto in the lambda’s parameter-declaration-clause)。
为避免以后出现任何问题:不,我没有实际的标准,但使用较早的草案 (N3797)。我希望他们没有删除我的解释。
谢谢!
【问题讨论】:
-
auto很好,const auto很好,const auto&很好;const std::vector<auto>&不好,因为它依赖于概念而不是标准 C++。