私の c++ の本には次のように書かれています (lippman、c++ 入門書、第 5 版、p. 508)。
合成されたデフォルト コンストラクターは、クラス ... に、デフォルト コンストラクターを明示的に定義しない型の const メンバーがあり、そのメンバーにクラス内初期化子がない場合、削除済みとして定義されます。(強調鉱山)
では、なぜこのコードでエラーが発生するのでしょうか?
class Foo {
Foo() { }
};
class Bar {
private:
const Foo foo;
};
int main() {
Bar f; //error: call to implicitly-deleted default constructor of 'Bar'
return 0;
}
上記の規則は、Foo がデフォルトのコンストラクターを明示的に定義しているため、エラーであってはならないことを示しているようです。何か案は?