首页 > 解决方案 > 参数包导致 Visual Studio 中出现“未初始化的局部变量”

问题描述

以下代码在 gcc 和 clang 下编译良好,但在 Visual Studio 2015 和更早版本中引发 C4700“未初始化的局部变量 'a' used”错误:

template<int T>
class V
{
public:
    int v[T];

    V() = default;
    template<typename ...A>
    V(A... args):
        v{args...}
    {}
};

int main()
{
    V<2> a(2, 2);
    V<2> b = a;
    return 0;
}

如果我将 body 添加到构造函数(通过删除= default和添加{}),错误就会消失。我在规范中找不到任何要求这种行为的东西。这是 Visual C++ 编译器中的错误还是我在规范中遗漏了什么?

标签: c++c++11templatesvisual-c++

解决方案


推荐阅读