option parser: make assign_default_once work with non-copyable types

master
Andrzej Rybczak 12 years ago
parent 73773cda98
commit a52bd231cb
  1. 13
      src/utility/option_parser.h

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

Loading…
Cancel
Save