VC++使ってます。
下のソース、メンバ関数Fの宣言と定義を同時にやらないと通らないのですが、
下に書いたように分離するのは仕様違反なのでしょうか?

struct S
{
 typedef char type;
};

template<typename T>
class C {
public:
 typedef T type;
 static void F(type::type* p);
};

template<typename T>
void C<T>::F(type::type* p)
{
 p;
}

S::type a;
C<S>::F(&a);