option parser: make assign_default_once work with non-copyable types

This commit is contained in:
Andrzej Rybczak
2014-09-03 11:44:33 +02:00
parent 73773cda98
commit a52bd231cb

View File

@@ -41,19 +41,18 @@ struct option_parser
template <typename ArgT>
assign_value_once(DestT &dest, ArgT &&value)
: m_assigned(false), m_dest(dest), m_source(std::forward<ArgT>(value)) { }
: m_dest(dest), m_source(std::make_shared<source_type>(std::forward<ArgT>(value))) { }
void operator()()
{
assert(m_assigned == false);
m_dest = std::move(m_source);
m_assigned = true;
assert(m_source.get() != nullptr);
m_dest = std::move(*m_source);
m_source.reset();
}
private:
bool m_assigned;
dest_type &m_dest;
source_type m_source;
DestT &m_dest;
std::shared_ptr<source_type> m_source;
};
template <typename IntermediateT, typename DestT, typename TransformT>