https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39478
--- Comment #3 from Daniel Frey <d.frey at gmx dot de> --- Just a reminder that the error message is basically still the same with GCC 4.9 and does not help to understand the cause of the error. Especially real-world cases are therefore extremely hard to understand! I realize that "recursion" might not be the most appropriate word to describe the problem, maybe "loop" or "cycle" would be more helpful. To explain the problem again: The type is incomplete as the error message says, but the real question is: Why can't the compiler complete it like it normally would? It certainly *tried* to, but it failed. This is not obvious from the error message. The loop/cycle that is caused by the attempt to complete the type is not shown in the error message. The Clang error message is slightly better as it at least contains a hint towards typename T::type dummy(); which, as T=bar<int> is trying to access bar<int>::type (which exists and is void), but therefore bar<int> has to be a complete type. Note that the error obviously goes away when you use int dummy(); instead. I'd still like to see GCC to hint at the loop when trying to complete types where the completion of A requires a completed B and the completion of B requires a completed A.