According to the standard (N3797) §8.3.6/6 Default arguments [dcl.fct.default] (emphasis mine):
Except for member functions of class templates, the default arguments in a member function definition that
appears outside of the class definition are added to the set of default arguments provided by the member
function declaration in the class definition. Default arguments for a member function of a class template
shall be specified on the initial declaration of the member function within the class template.
The above means that default arguments for member functions of template classes go only inside the definition of the class. As such, you will either put in the declaration of the member function the default argument:
template<T>
class TSquare {
...
TSquare (T size_, T x_, T y_, T scale_ = 0);
...
};
Or you shall put the entire definition of the member function inside the class definition.
template<T>
class TSquare {
...
TSquare (T size_, T x_, T y_, T scale_ = 0) {
...
}
...
};