I have a problem with a piece of code of the following form:
template
class Class1 {
public:
template TypeName1*
You should use the template keyword when you are invoking a member function template and you have a dependent name, or method1 will be parsed as a member variable of c and < as a "less than" symbol:
c.template method1<TypeName1>();
As @DrewDormann correctly points out, the reason why the template keyword is required is that a specialization of the Class1 class template could exist for the particular type argument provided, where method1 is defined as a member variable rather than a function template. Thus, the compiler must be explicitly instructed to parse method1 as the name of a function template if this is not the case.