Smart pointers realy need a native way to be specified, similar to how we use & to declare references and * for pointers.
Filling your code with shared_ptr<Something> and the likes is just not going to win the majority over, even if it's useful.
It saves you from having to explicitly name the type parameter and you just need to pass in the parameters of the constructor. It's not as terse as & or *, but it's not that bad.