template <typename T>
class c
{
    template <typename U> struct s{ typedef U u; };
public:
    typedef s<T>::u u;
};

を VC7.1 でコンパイルしたところ

error C2146: 構文エラー : ';' が、識別子 'u' の前に必要です。
error C2501: 'c<T>::u' : 識別名を宣言するのに、型が指定されていません。
warning C4346: 'c<T>::s<T>::u' : 依存名は型ではありません。

とエラーが出るのですが、何故でしょうか…