Warum kompiliert dieses Snippet mit einheitlicher Initialisierung mit g ++ 4.6, aber nicht mit g ++ 4.7?

Beachten Sie, dassabgeleitet Verwendet die einheitliche Initialisierungssyntax von C ++ 11, um den Basisklassenkonstruktor aufzurufen.

class base
{
    protected:
        base()
        {}
};

class derived : public base
{
    public:
        derived()
            : base{} // <-- Note the c++11 curly brace syntax
                     // using uniform initialization. Change the
                     // braces to () and it works.
        {}
};

int main()
{
    derived d1;

    return 0;
}

g ++ 4.6 kompiliert dies, g ++ 4.7 jedoch nicht:

$ g++-4.7 -std=c++11 -Wall -Wextra -pedantic curly.cpp -o curly
curly.cpp: In constructor ‘derived::derived()’:
curly.cpp:4:13: error: ‘base::base()’ is protected
curly.cpp:19:24: error: within this context

Was ist los?

Update 1: Kompiliert auch ohne Warnung mit clang ++ - 3.1
Update 2:Sieht mit Sicherheit nach einem Compiler-Fehler aus. Es ist anscheinend in GCC 4.7.3 behoben.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage