Running the following code: typedef int my_int; template <class T> class my_type{ public: T member; my_type(T t): member(t) {}; }; int main(){ my_type<my_int> mt(0); return mt.member; } and trying to complete "print my_type<int>::my" the line gets replaced by (gdb) print my_type<int>::_type<int> And if it can keep going indefinitely: (gdb) print my_type<int>::my_type<int>::my_type<int>::my_type<int>::_type<int>