【发布时间】:2015-03-07 14:51:37
【问题描述】:
谁能解释一下为什么在这种情况下(在 lambda 中使用时)参数可以声明为“auto ... arg”:
auto glambda = [](auto a, auto&& b) { return a < b; };
bool b = glambda(3, 3.14); // OK
auto vglambda = [](auto printer) {
return [=](auto ... ts) { // OK: ts is a function parameter pack
printer(std::forward<decltype(ts)>(ts)...);
return [=]() { printer(ts ...); };
};
};
auto p = vglambda( [](auto v1, auto v2, auto v3) { std::cout << v1 << v2 << v3; } );
auto q = p(1, 'a', 3.14); // OK: outputs 1a3.14 q(); // OK: outputs 1a3.14
生活example.
但不在 this 中(在函数中使用时):
void func(auto ... arg)
{
}
生活example.
我会很高兴引用最新的 ISO C++ 草案的详细解释。还是这是clang编译器的错误?因为它实际上在 gcc 5.0 下编译得很好。
【问题讨论】:
-
最新的最好。但我也想要一些文档参考。
-
嗯,至少在 C++14 之前它是无效的。不过,Concepts TS 可能会以某种形式进入 C++1z,但会允许它:en.cppreference.com/w/cpp/language/function
-
似乎还没有出现在 C++1z 的最新草案中。
-
什么?你能更详细地解释一下你在说什么吗?
-
嗯,在函数参数(不是 lambda 参数)中使用占位符类型在概念 TS 中,但这甚至不是当前 C++1z 草案的一部分。然而。所以根本不允许。
标签: c++ gcc parameters lambda clang