代码如下:
struct Foo {
Foo(const char *);
};
Foo::Foo(const char *str = 0)
{
}
VS 2013 和 gcc 4.8.0 接受这样的代码,而 clang 3.3 拒绝这样的代码:
错误:在重新声明时添加默认参数使此构造函数成为默认构造函数
从标准(C++03 和 C++11)的角度来看,谁是正确的?
笔记:
我也喜欢 clang 的选择,但我会向 gcc 和 Visual Studio 报告错误,如果从标准的角度来看这是不正确的,这有助于说服编译器的开发人员修复这个问题。
海合会
我在这里描述了问题:http: //gcc.gnu.org/bugzilla/show_bug.cgi ?id=58194
但运气不好,他们暂停错误修复,直到草案成为标准。