2008-01-13

VC9のよく分からない致命的なエラー

 以下のコードをコンパイルしようとすると、コンパイラ自体が例外的な終了をする。
class Foo { public :   virtual ~Foo() {} ; } ; int main() {   Foo * ptr ;   ptr->~Foo ;//()が抜けている。 }
 念のために行っておくが、コード自体の実行ではない。コンパイルしようとするだけで、VC9のコンパイラは落ちる。  再現させるための問題は二つあると思われる。  1.クラスFooのデストラクタは、仮想関数でなければならない。  2.クラスFooのデストラクタを、ポインタ経由で明示的に呼ぶ。  そもそもコンパイルエラーになるコードなのだが、期待される動作は、以下のコンパイルエラーを出すことだ。 error C3866: destructor call missing argument list  それなのに、実際のエラーは、 fatal error C1001: An internal error has occurred in the compiler.  である。

No comments: