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ć.

questionAnswers(2)

yourAnswerToTheQuestion