きままにブログ

プログラミングを主とした私のメモ帳です。寂しいのでコメントください笑

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::A*もどういったものか分からないためエラーとなる。これが型であることを明示するために

typename B<T>::A* B<T>::func();

とする必要がある。