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.

Reply via email to