How to avoid copying?
In both cases, two constructors are called, but you do not see them in the first case, since one of them is a generated compiler. If you want to avoid copying, you need to use a different syntax, for example:
A<bool> a(true);
A<bool> a(3.5f);
( ) ?
A<bool> a = A<bool>(true);
A (bool val) , A A. , . : , .
A<bool> a = A<float>(3.5f);
A<float>(float val) , A<bool>( A<float> val) .