Muss ich wirklich einen vom Benutzer bereitgestellten Konstruktor für const-Objekte implementieren?
Ich habe den Code:
class A {
public:
A() = default;
private:
int i = 1;
};
int main() {
const A a;
return 0;
}
Es kompiliert gut auf g ++ (sieheideone), schlägt aber auf clang ++ mit Fehler fehl:
Die Standardinitialisierung eines Objekts vom Typ const 'const A' erfordert einen benutzerdefinierten Standardkonstruktor
Ich habe dieses Problem am gemeldetLLVM Bug-Tracker und habe es UNGÜLTIG.
Ich halte es für absolut sinnlos, die Clang-Entwickler zu überzeugen. Auf der anderen Seite sehe ich keinen Grund für eine solche Einschränkung.
Kann mir jemand raten, ob der C ++ 11 Standard impliziert, dass dieser Code ungültig ist? Oder sollte ich einfach einen Fehler an g ++ melden? Oder gibt es genug Freiheit in den Sprachregeln, um mit diesem Code auf viele Arten umgehen zu können?