mirror of
https://github.com/boostorg/optional.git
synced 2025-11-03 01:02:15 +01:00
24d29e5865ef51c1ad62d9a98c4f9dd2f25aed22
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.
optional
A library for representing optional (nullable) objects in C++.
optional<int> readInt(); // this function may return either an int or a not-an-int
if (optional<int> oi = readInt()) // did I get a real int
cout << "my int is: " << *oi; // use my int
else
cout << "I have no int";
For more information refer to the documentation provided with this library.
Description
Languages
C++
98.5%
CMake
0.9%
Shell
0.4%
HTML
0.2%