コードでリンカ エラーが発生します。私はそれを以下の最低限の必需品に絞り込みました.
このコードは、次から参照されるリンカ エラー「Foo の vtable」を示します: Foo::Foo()
class Foo {
public:
Foo();
virtual ~Foo() = default;
};
Foo::Foo() { }
しかし、このコードではエラーは発生しません。
class Foo {
public:
Foo();
virtual ~Foo() { }
};
Foo::Foo() { }
なんで?= default
は基本的に空の角括弧と同じことをするはずだと思いました。
更新: Xcode 4.5.2 の一部である「Apple LLVM コンパイラ 4.1」を使用しています。このコンパイラのバグでしょうか?最新の GCC で動作する可能性があります (ただし、Apple はもう出荷していません)。コンパイラに関する議論については、以下のコメントを参照してください。
更新 2:以下で説明するように、行を に変更するとvirtual inline ~Foo() = default;
、このエラーが解消されます。これは単にバグである必要はありませんか?この場合、明示的に書き出さない限り、コンパイラはインライン関数を認識しないようinline
です。