template <class E, class C> struct CompFwd; struct Brick; template <int Dim, class T, class EngineTag> struct Engine; template <int Dim, class T, class E> class Array;
template <class Subject> struct ComponentView; template<int Dim, class T, class EngineTag> struct ComponentView<Array<Dim, T, EngineTag> > { typedef Array<Dim, T, EngineTag> Subject_t; typedef typename Subject_t::Engine_t Engine_t; typedef Array<Dim, T, CompFwd<Engine_t, int> > Type_t; }; template <int Dim, class T, class EngineTag> struct Array { typedef Engine<Dim, T, EngineTag> Engine_t; typedef Array<Dim, T, EngineTag> This_t; typename ComponentView<This_t>::Type_t comp(int i1) const; }; typedef Array<1, double, Brick> Array_t; typedef ComponentView<Array_t>::Type_t CView_t; causes g++ to emit: tests> g++-3.4 -c notype.cpp notype.cpp: In instantiation of `Array<1, double, Brick>': notype.cpp:19: instantiated from `ComponentView<Array_t>' notype.cpp:36: instantiated from here notype.cpp:30: error: no type named `Type_t' in `struct ComponentView<Array_t>' which could be improved to mention the missing of the type is caused by aborted recursive instantiation of struct ComponentView<Array_t>. At the moment the diagnostic is at least misleading, as there is a Type_t in struct ComponentView<Array_t>. -- Summary: Misleading diagnostic for recursive template instantiation Product: gcc Version: 3.4.3 Status: UNCONFIRMED Severity: enhancement Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: rguenth at tat dot physik dot uni-tuebingen dot de CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18296