Visual Studio std :: array初始化程序错误(2797)

时间:2015-07-01 08:17:12

标签: c++ initializer-list stdarray

Visual Studio目前存在一个问题,即以下内容无法编译,从而产生错误

  

错误C2797:'vec :: v':列出成员内部的初始化   初始化列表或非静态数据成员初始值设定项不是   实施

#include <array>

template<class T, int C>
struct vec
{
    typedef T value_type;

    enum { num_components = C };

    std::array<T, C> v;

    template<typename ...Args>
    vec(Args&&... args) : v{{args...}} {}
};

template<class T>
struct vec2 : vec<T, 2>
{
    vec2(T x, T y) : vec(x, y) {}
};

int main(void)
{
    vec<float, 2> v(10.0f, 20.0f);  
}

Microsoft Connect ticket for it已关闭但there's an MSDN piece about it that建议“使用内部列表的显式构造”。我不明白怎么做这个代码看起来很陌生(初学者)。

任何人都可以使用std :: array协助一个例子吗?

1 个答案:

答案 0 :(得分:4)

在这种特殊情况下,您只需添加一对括号:

vec(Args&&... args) : v({{args...}}) {}

这适用于VS2013,我想,你正在使用它。

使用VS2015,代码无需修改即可运行。

另请注意,对于C ++一致性vec2应该重写为

vec2(T x, T y) : vec<T, 2>(x, y) {}

using base = vec<T, 2>;
vec2(T x, T y) : base(x, y) {}