Код выглядит так:
struct Foo {
Foo(const char *);
};
Foo::Foo(const char *str = 0)
{
}
VS 2013 и gcc 4.8.0 принимают такой код, в то время как clang 3.3 отклоняет такой код с помощью:
ошибка: добавление аргумента по умолчанию в redeclaration делает этот конструктор конструктором по умолчанию
кто прав от стандартной (С++ 03 и С++ 11) точки зрения?
Примечание:
Мне нравится выбор clang, но я собираюсь сообщить об ошибке gcc и visual studio, и если это неверно со стандартной точки зрения, это помогает убедить разработчиков компиляторов исправить эту проблему.
НКУ
Я описал проблему здесь: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58194
Но не повезло, они приостанавливают исправление ошибок до тех пор, пока проект не станет стандартным.