Bruce Eckel's Thinking in C++, 2nd Ed | Contents | Prev | Next |
//: C19:TypenamedID.cpp // Using 'typename' to say it's a type, // and not something other than a type template<class T> class X { // Without typename, you should get an error: typename T::id i; public: void f() { i.g(); } }; class Y { public: class id { public: void g() {} }; }; int main() { Y y; X<Y> xy; xy.f();
//: C19:UsingTypename.cpp // Using 'typename' in the template argument list template<typename T> class X { }; int main() { X<int> x;