请注意,derived使用 C++11 统一初始化语法来调用基类构造函数。
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 编译这个,但是 g++4.7 没有:
$ 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
这是怎么回事?
更新 1:它也可以在没有警告的情况下使用 clang++-3.1进行编译
更新 2:看起来肯定是一个编译器错误。它显然已在 GCC 4.7.3 中修复。