
Why is make_shared declared as
template<typename T, typename Arg1 > shared_ptr<T> make_shared( Arg1 const & arg1 );
rather than
template<typename T, typename Arg1 > shared_ptr<T> make_shared( Arg1 arg1 );
since the effect is that if you have a constructor that takes non-const references you cannot use make_shared( ) on it.
I guess it's because your compiler doesn't support && (i.e. perfect forwarding is impossible). http://www.boost.org/doc/libs/1_48_0/libs/smart_ptr/make_shared.html#functio... <<The prototypes shown above are used if your compiler supports rvalue references and variadic templates. They perfectly forward the args parameters to the constructors of T. Otherwise, the implementation will fall back on forwarding the arguments to the constructors of T as const references. If you need to pass a non-const reference to a constructor of T, you may do so by wrapping the parameter in a call to boost::ref. >>