Я немного смущен, почему следующий код делает то, что он делает:
class Base
{
public:
Base() = default;
Base(const Base &) =delete;
Base &operator=(const Base &) = delete;
Base(const char*) {}
};
class Holder
{
public:
Holder() = default;
private:
// Base b = Base();
Base b2 = {};
};
int main()
{
Holder h;
}
в этом воплощении, он компилируется, однако, если я не комментирую Base b = Base();
, он дает следующую ошибку:
main.cpp:15:17: error: use of deleted function 'Base::Base(const Base&)'
Base b = Base();
^
main.cpp:5:6: note: declared here
Base(const Base &) =delete;
^
и я просто не могу найти в стандарте, почему он пытается вызвать конструктор копирования для инициализатора Base b = Base()
, и почему он не вызывает Base b2 = {}
... или это только один из тех немного неясности, которая скрыта в нескольких словах в абзаце где-то?
Можете ли вы дать (краткое) объяснение, почему это происходит?
(coliru: http://coliru.stacked-crooked.com/a/c02ba0293eab2ce5)