いろきゅうの(元)はてなダイアリー

はてなダイアリーから移行中…

やっぱりVCのバグなんだろうなぁ。

ちょっと前に、VC7.1でコンパイルできないコードを紹介しましたが、別の typedefをネストしたコードは通ってみたりしたので、いろいろ実験してみました。


class AAA
{
public:
    typedef int value_type;
};

class BBB
{
public:
    typedef AAA value_type;
    typedef AAA value_type_b;
};

class CCC
{
public:
    typedef BBB value_type;
    typedef BBB value_type_c;
};

class DDD
{
public:
    typedef CCC value_type;
    typedef CCC value_type_d;
};

AAA
    ::value_type    a;

/*BBB
    ::value_type
    ::value_type    b0;*/
BBB
    ::value_type_b
    ::value_type    b1;

/*CCC
    ::value_type
    ::value_type
    ::value_type    c0;*/
CCC
    ::value_type_c
    ::value_type_b
    ::value_type    c1;
CCC
    ::value_type
    ::value_type_b
    ::value_type    c2;
/*CCC
    ::value_type_c
    ::value_type
    ::value_type    c3;*/

/*DDD
    ::value_type
    ::value_type
    ::value_type
    ::value_type    d0;*/
DDD
    ::value_type_d
    ::value_type_c
    ::value_type_b
    ::value_type    d1;
DDD
    ::value_type
    ::value_type_c
    ::value_type_b
    ::value_type    d2;
DDD
    ::value_type_d
    ::value_type
    ::value_type_b
    ::value_type    d3;

コメントアウトしてあるのは、C2146, C2761, C2501 で、コンパイルが通らなかったコード。どうも、同じtypedef名を連続して使ってしまうと機嫌が悪い模様。

…コレは、明らかにバグだよなぁ…。

追伸

Visual Studio 2005 β2 (VC8)だと普通に全部通りました。orz