Standard-argument, gcc vs clang

Code sieht wie folgt aus:

struct Foo {
    Foo(const char *);
};

Foo::Foo(const char *str = 0)
{
}

VS 2013 und gcc 4.8.0 akzeptieren einen solchen code,
während clang 3.3 lehnen diesen code mit:

Fehler: neben der Standard-argument auf nochmaliges deklarieren einer macht dieser Konstruktor einen Standardkonstruktor

Recht wer vom standard (C++03 und C++11) point of view?

Hinweis:

Ich mag das Geräusch ist Wahl auch, aber ich werde berichten gcc und visual studio
und wenn dies nicht richtig von standard-Sicht, das hilft
überzeugen compiler-Entwickler, um dieses Problem zu beheben.

GCC

Ich das beschriebene Problem hier: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58194

Aber kein Glück, Sie auszusetzen, Fehler beheben, bis der Entwurf zum standard geworden.

  • Das GERÄUSCH macht mehr Sinn. Sollten Sie die default-parameter im Konstruktor, in dem die Erklärung, nicht in seiner definition.
  • Ohne einen Blick in die Spezifikation, ich würde behaupten, dass der Klang richtig ist. Überlegen Sie, was passieren würde, wenn Sie nicht haben, sowohl die Struktur und definition der Konstruktor-definition in der gleichen Datei (z.B. die normale Aufteilung in header und source-Dateien), dann wird nur die Quell-Datei mit der Konstruktor-definition würde das wissen, über das Standard-argument und keine anderen Benutzer der Struktur.
InformationsquelleAutor fghj | 2013-08-19
Schreibe einen Kommentar