相关疑难解决方法(0)

为什么在使用模板化方法的嵌套结构时不允许使用泛型lambda?

据我所知 - 泛型lambda被转换为具有模板化的局部范围结构的对象operator().这使得通用lambda非常强大且易于使用的工具.另一方面,可以创建嵌套到函数中的结构,但是当结构具有模板化成员时,例如:

#include <iostream>

int main() {
    struct inner {
    template <class T>
       void operator()(T &&i) { }
    };
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

或者自己模仿:

int main() {
    template <class T>
    struct inner {
       void operator()(T &&i) { }
    };
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器似乎有编译它的问题:

error: invalid declaration of member template in local class
Run Code Online (Sandbox Code Playgroud)

error: a template declaration cannot appear at block scope
Run Code Online (Sandbox Code Playgroud)

我认为问题在c ++标准中比在编译器bug中更多.lambdas被允许拥有模板化成员而不是本地结构的原因是什么?

我发现了这个问题,但我认为答案有点过时(即使对于c ++ 11,我也不认为这是真的).

c++ templates local-class generic-lambda c++14

32
推荐指数
1
解决办法
1214
查看次数

标签 统计

c++ ×1

c++14 ×1

generic-lambda ×1

local-class ×1

templates ×1