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.

Share:
14,756
Korchkidu
Author by

Korchkidu

Updated on July 25, 2022

Comments

  • Korchkidu
    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
    SamuelMS over 10 years
    I had to use an extra pair of braces in the constructor for this to compile in VS2013. A() : m_array ({ { 0, 1, 2 } })