以下の例では、既定のコンストラクタが明示的に削除されている(またはその既定になっている)にもかかわらず、集約の初期化が可能であることに驚きました。集約初期化でコンストラクタへのアクセスが維持されない
#include <iostream>
struct DefaultPrivate
{
const int n_;
static const DefaultPrivate& create();
private:
DefaultPrivate() = delete;
};
const DefaultPrivate& DefaultPrivate::create()
{
static DefaultPrivate result{10};
return result;
}
int main() {
DefaultPrivate x; //Fails
DefaultPrivate y{10};//Works
return 0;
}
プライベートデフォルト(または削除済み)構成と集約初期化の間の関係は、標準では指定されていませんか?
これは、GCC 6.3およびVCC 2017の両方の場合
私は質問をしていた理由だった私は、既定のコンストラクタへのアクセスを変更するとCから公開集約の初期化
私の謝罪、私は気づいたと、その部分を削除します。私はhファイルを修正し、何らかの理由で私のcppファイルが再コンパイルされなかった –