diff --git a/src/utility/option_parser.h b/src/utility/option_parser.h index 4bc9f35e..b2b4f836 100644 --- a/src/utility/option_parser.h +++ b/src/utility/option_parser.h @@ -41,19 +41,18 @@ struct option_parser template assign_value_once(DestT &dest, ArgT &&value) - : m_assigned(false), m_dest(dest), m_source(std::forward(value)) { } + : m_dest(dest), m_source(std::make_shared(std::forward(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 m_source; }; template