Не удается скопировать единую инициализацию, когда объект не имеет элементов данных
Обновляя некоторый код для использования унифицированной инициализации, я подумал, что это будет незаменимая современная замена на данный момент "Старый стиль" Стиль скобок. Я знаю это неЭто всегда так (очевидный пример,vector
) но я'наткнулся на другое различие, которое я неТ понять.
class Object {
public:
Object() = default;
Object(const Object&) = default;
};
int main() {
Object o;
Object copy{o}; // error
Object copy2(o); // OK
}
не удается скомпилировать под clang3.5 с ошибкой: (также не работает под gcc)
error: excess elements in struct initializer
Есть два разных измененияObject
которые делают эту работу. Либо добавление к нему члена данных, либо предоставление ему пустого тела конструктора копирования
class Object {
private:
int i; // this fixes it
public:
Object() = default;
Object(const Object&) { } // and/or this fixes it as well
};
Я нене понимаю, почему это должно иметь значение.