私はコンパイルされませんでしたいくつかのコードのためのいくつかのテストをしていたのでは動作し、私はこのコードことを発見:上(暗黙的に削除されたデフォルトコンストラクタはC++ 14
struct A {
A(int) {};
virtual void foo() = 0;
};
struct B : public virtual A {
virtual void bar() = 0;
};
struct C : public B {
C() : A(1) {}
virtual void foo() override {}
virtual void bar() override {}
};
int main() {
C c;
return 0;
}
C++ 11には、コンパイルに失敗しますg ++ 7.0.1)には‘B::B()’ is implicitly deleted because the default definition would be ill-formed
が、C++では14が正常にコンパイルされます。
私は、C++ 14のどの新機能がこれを動作させたかを知ろうとしましたが、無駄です。 cppreferenceのdescriptionには、それが見えるようなものは何も言及されていません。
このコードはC++ 14ではコンパイルできますが、C++ 11ではコンパイルできないのはなぜですか?
ClangのC++ 11(およびC++ 03)モードで動作します。 GCCのバグでしょうか? –
@JosephThomson私はそれについて考えました - 確かに、私は悪い私をClangでテストしませんでした。実際には、C++ 03モードの 'g ++ 'でも動作します。だから多分私はバグレポートを開く必要があります。 – Svalorzen
あなたの質問に誰かが答えることができるかどうかによって決まります! –