C++ 标准大师的几个相关问题。
传入的 C++20引入了模板 lambdas ( P0428R2 )。
所以而不是
auto x = [](auto x, auto y){ return x+y; };
我们可以指定模板参数如下
auto x = []<typename T>(T x, T y){ return x+y; };
到现在为止还挺好。
第一个问题:模板 lambdas 中的显式模板参数只能从参数推导,还是可以添加非推导的模板参数?
阅读 P0428r1 我没有看到任何明确的限制,但我也没有看到非推导模板参数的示例。
在第一个近似值中,我认为非推导模板参数是合法的,因为我看到以下愚蠢的代码
int main()
{
[]<int = 0>(){ }();
}
使用 g++(10.0.0 头)和 clang++(10.0.0 头)编译和运行。
假设允许非推导的模板参数,那么第二个问题是:如何在提供模板参数的同时调用模板 lambda?
例如:给定以下模板 lambda
auto x = []<std::size_t I>(auto t){ return std::get<I>(t); };
在没有显式命名的情况下I
调用此类 lambda 时是否有一些语法用于指定模板参数?operator()
我试过了
x<0u>(y);
但 the<
被解释为关系运算符。
我试过简单地添加template
x template <0u>(y);
但它不起作用。