This is expected. Where it can C++ will deduce the template parameters in template functions. This doesn't apply to template classes however.
As an example, the type std::pair<A,B> can be constructed like so:
std::pair<A,B>(a,b)
However, we can use the utility function std::make_pair()
std::make_pair(a,b)
This is good because typically the type names are going to be a good bit longer. In addition if we were change the types then we don't need to change the call.
An example of where C++ would fail to deduce the template type is:
template< typename T >void pointer_hackery( const T *t ){ if(t) { // ... }}int main(){ // call with a NULL pointer // poor compiler can't figure out what T is. pointer_hackery(0);}