24d29e5865
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. |
||
---|---|---|
.. | ||
boost |