Q:

Is it necessary to use template parameters to refer to same class inside definition?

Is this necessary:
 template <typename T>
 class A{
   T*point;
   A<T> someFunction(){} //instead of returning just "A", not "A<T>"
 }

Will someFunction implicitly return the A of the same type as the class being defined? Because outside the class, you can only refer to this type as A<float> or similar, so I'd assumed this was necessary inside the class as well. I discovered it compiles without the <> so this made wonder if it is a safe habit to omit the brackets.

A:

It's valid and safe C++ to omit the template parameters inside the class definition. In fact it's good practice, since you might add other template parameters with default values later on. You might forget to change A<T> to A<T,SomeOtherParameter> and get strange compile-time errors. Then just returning A will do it. 

A:

You can say either A<T> or just A, and A means the same as A<T>. This is because of 14.6.1/1:

Like normal (non-template) classes, class templates have an injected-class-name (Clause 9). The injected-class-name [...] is equivalent to the template-name followed by the template-parameters of the class template enclosed in <>.

