Enable moving of data into Boxed_Values when possible

This commit is contained in:
Jason Turner 2014-10-05 12:11:46 -06:00
parent 87e40237d3
commit f547b4bb10

View File

@ -132,9 +132,9 @@ namespace chaiscript
} }
template<typename T> template<typename T>
static std::shared_ptr<Data> get(const T& t) static std::shared_ptr<Data> get(T t)
{ {
auto p = std::make_shared<T>(t); auto p = std::make_shared<T>(std::move(t));
auto ptr = p.get(); auto ptr = p.get();
return std::make_shared<Data>( return std::make_shared<Data>(
detail::Get_Type_Info<T>::get(), detail::Get_Type_Info<T>::get(),
@ -158,9 +158,10 @@ namespace chaiscript
public: public:
/// Basic Boxed_Value constructor /// Basic Boxed_Value constructor
template<typename T> template<typename T,
explicit Boxed_Value(T t) typename = typename std::enable_if<!std::is_same<Boxed_Value, typename std::decay<T>::type>::value>::type>
: m_data(Object_Data::get(t)) explicit Boxed_Value(T &&t)
: m_data(Object_Data::get(std::forward<T>(t)))
{ {
} }