int someFunction() { typedef std::vector::iterator> T; std::cout << getTypeName() << '\n'; // prints `someFunction()::T' // Weirdly enough, for function pointer typedefs, that doesn't happen: typedef void (*U)(std::vector::iterator>); std::cout << getTypeName() << '\n'; // prints // `void (*)(std::vector, // std::allocator > >)' }