forked from boostorg/optional
Fix for clang, when adapted type is convertible from other types.
The problem was with copy/move constructors of boost::optional<T>, which invoked optional_base<T> constructors with a single argument. Since optional_base has copy/move constructors along with initializing constructors taking a single argument, the latter may be considered by the compiler for viability. While doing so, the compiler may instantiate the template constructor of T with an argument of optional_base<T>, which in turn may fail if the constructor attempts to inspect the type of its argument (e.g. to constrain the set of acceptable types). Specifically, this happens with clang in C++03 mode, when boost::multiprecision::number is wrapped in boost::optional and a copy constructor of boost::optional is invoked. This commit fixes the problem by destinguishing copy/move constructors of optional_base from initializing constructors with an additional tag argument.
This commit is contained in:
@ -30,7 +30,7 @@ class tc_optional_base : public optional_tag
|
||||
:
|
||||
m_initialized(false) {}
|
||||
|
||||
tc_optional_base ( argument_type val )
|
||||
tc_optional_base ( init_value_tag, argument_type val )
|
||||
:
|
||||
m_initialized(true), m_storage(val) {}
|
||||
|
||||
|
Reference in New Issue
Block a user