2017-04-14 13 views
11

私はコンパイルされませんでしたいくつかのコードのためのいくつかのテストをしていたのでは動作し、私はこのコードことを発見:上(暗黙的に削除されたデフォルトコンストラクタは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ではコンパイルできないのはなぜですか?

+0

ClangのC++ 11(およびC++ 03)モードで動作します。 GCCのバグでしょうか? –

+0

@JosephThomson私はそれについて考えました - 確かに、私は悪い私をClangでテストしませんでした。実際には、C++ 03モードの 'g ++ 'でも動作します。だから多分私はバグレポートを開く必要があります。 – Svalorzen

+0

あなたの質問に誰かが答えることができるかどうかによって決まります! –

答えて

1

gcc 7のオンラインコンパイラでコードをチェックアウトしたとき、問題なく完全に動作していたため、gcc 7のバグです。

ここでは、あなたが好きなコンパイラを設定してテストをやりたい場合に、そのIDEをオンラインで提供します。

https://godbolt.org/

私はより良いあなたを助けることはできませんが、私はあなたのエラーを再現することができなかったために申し訳ありません。