C4346 : 依存名は型名ではありません
template <class T> struct B { struct A; A* func(); }; template <class T> struct B<T>::A { }; template <class T> B<T>::A* B<T>::func() { // B<T>::A*は型名ではありません! return new A(); }
Tが不明なため、B
typename B<T>::A* B<T>::func();
とする必要がある。