Workaround for error C2536: cannot specify explicit initializer for arrays in Visual Studio 2013
14,756
As the comments, you can try this workaround.
class A
{
A() : m_array ({ 0, 1, 2 }) {}
private:
std::array<int, 3> m_array;
};
It seems VS2013 made initializer-list for std::array
constructor well and you can initialize it in constructor's intializer. The code that you wrote is valid and both gcc and clang support it. VS2013 lacks.
Author by
Korchkidu
Updated on July 25, 2022Comments
-
Korchkidu almost 2 years
the following code does not compile with Visual Studio 2013 while it should:
class A { A() :m_array{ 0, 1, 2 } {} // error C2536: 'A::A::m_array' : cannot specify explicit initializer for arrays private: int m_array[3]; };
See bug report for more details.
What are the possible workarounds?
-
SamuelMS over 10 yearsI had to use an extra pair of braces in the constructor for this to compile in VS2013. A() : m_array ({ { 0, 1, 2 } })