This last approach fails because there's no guarantee that, for example, the size of a long is less than the size of a long double, and assigning a long to a long double would in such a case result in loss of precision.
T is a template parameter, a type argument to the template.
An example of heavy template use can be found in STL, the Standard Template Library. This feature is new in a way and not yet widely available, but worth mentioning here. Member templates are simply a generalization of templates such that a template can be a class member. This is an adaptation of a class found in the Standard Template Library. By using a template constructor it is possible to construct a Pair from any other Pair, assuming that conversion from T to A and U to B are supported.