¿Por qué este fragmento de código que usa la inicialización uniforme se compila con g ++ 4.6 pero no con g ++ 4.7?
Tenga en cuenta quederivado utiliza la sintaxis de inicialización uniforme de C ++ 11 para llamar al constructor de la clase base.
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 compila esto, sin embargo g ++ 4.7 no lo hace:
$ 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
¿Que esta pasando?
Actualización 1: También se compila sin advertencias con clang ++ - 3.1
Actualización 2:Parece un error de compilación de seguro. Aparentemente está arreglado en GCC 4.7.3.