ちょっと前に、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