2010-06-19

VCのキャスト周りの実装は腐っているとしか言いようがない

以下のコードはill-formedである。

struct C { } ;

int main( )
{
    struct C() ; // ill-formed.
    C() ; // OK
}

なぜならば、Explicit type conversion (functional notation)には、simple-type-specifierかtypename-specifierしか許可されていないからだ。普通のキャストのように、type-idを使うことは出来ない。

しかるに、VC10では、このコードをコンパイルできる。こういう些細なバグのひとつひとつが、移植できないコードを増やすというのに。

とはいえ、このコードは、コンパイルできてもいいのではないかとも思う。まあ、typedefするとか、static_castした方が、分かりやすいのだが。

No comments: