| 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;