具有函数本地类型的std :: vector <T>

Bon*_*ero 2 c++

为什么这样呢

#include <vector>

void f()
{
    struct S
    {
        int first, second, third;
    };

    std::vector<S> vs;
}
Run Code Online (Sandbox Code Playgroud)

使用Visual C++ 2015,但不是使用g ++ 4.8.4?

And*_*dyG 8

确保您至少编译-std=c++0x.

在C++ 11中,修改了标准以允许本地类成为模板参数(用于lambda支持).如果你的目标是预C++ 11,这将无法正常工作.

如果您正在编译MSVC,它将默认启用C++ 11,而clang和pre-gcc 6则不然.

另请参见:ISO C++ 03对函数范围定义的结构有什么限制?

  • @ tobi303 lambda是一个未命名的类类型.它看起来像一个表达式,但这只是语法糖.编译器实际上使用您在表达式中提供的内容构建类类型. (4认同)