inheriting from class of specialized self?
Is this valid C++? template<class category> class any_iterator : public any_iterator<void> { public: typedef any_iterator<void> any_iter_void; any_iterator() : any_iter_void() {} }; template<> class any_iterator<void> { public: typedef any_iterator<void> any_iter_void; any_iterator() {} void foo() {}; }; int main() { any_iterator<int> a; a.foo(); } MSVC10 accepts it with no errors/warnings on \WALL , but gcc-4.5.1 complains: prog.cpp:3:5: error: invalid use of incomplete type 'class any_iterator' prog.cpp:2:11: error: declaration of 'class any_iterator' prog.cpp: In function 'int main()': prog