Jednolita inicjalizacja nie powiela się, gdy obiekt nie ma członków danych
Aktualizując jakiś kod, aby używać jednolitej inicjalizacji, pomyślałem, że będzie to nowoczesne, zastępcze uzupełnienie dla stylu nawiasów „starego stylu”. Wiem, że nie zawsze tak jest (oczywisty przykład,vector<int>
) ale natknąłem się na inną różnicę, której nie rozumiem.
class Object {
public:
Object() = default;
Object(const Object&) = default;
};
int main() {
Object o;
Object copy{o}; // error
Object copy2(o); // OK
}
nie kompiluje się pod clang3.5 z błędem: (także nie działa w gcc)
error: excess elements in struct initializer
Istnieją dwie różne zmianyObject
że to działa. Dodaj do niego element danych lub podaj mu pusty obiekt konstruktora kopii
class Object {
private:
int i; // this fixes it
public:
Object() = default;
Object(const Object&) { } // and/or this fixes it as well
};
Nie rozumiem, dlaczego mają to zmienić.