TITLE: A template is not the same as a macro [ Material adapted from "C++ Gotchas", tutorial notes copyright by Tom Cargill, p. 66 ] template class C { public: const T p; }; int main () { C x; // x.p is "char* const", not "const char*" } In essence, there is a "typedef char* T" in effect inside the scope of the template rather than just a macro-like substitution in the source.