id summary reporter owner description type status milestone component version severity resolution keywords cc 12563 Assigning to boost::optional Fernando Cacciola "{{{ #include #include using Tup = std::tuple>; Tup x; boost::optional y = x; }}} when compiled with: clang++-3.7 -std=c++14 -stdlib=libc++ temp.cpp fails to compile: {{{ error: no matching member function for call to 'construct' this->construct( boost::move(rhs.get()) ); ~~~~~~^~~~~~~~~ /usr/include/c++/v1/tuple:220:15: note: in instantiation of function template specialization 'boost::optional::optional > >' requested here : value(_VSTD::forward<_Tp>(__t)) ^ /path/boost/1.62.0a-src/boost/boost/optional/optional.hpp:348:10: note: candidate function not viable: no known conversion from 'typename ::boost::move_detail::remove_reference > &>::type' (aka 'std::__1::tuple >') to 'const int' for 1st argument void construct ( argument_type val ) ^ /path/boost/1.62.0a-src/boost/boost/optional/optional.hpp:355:10: note: candidate function not viable: no known conversion from 'typename ::boost::move_detail::remove_reference > &>::type' (aka 'std::__1::tuple >') to 'int' for 1st argument void construct ( rval_reference_type val ) ^ /path/boost/1.62.0a-src/boost/boost/optional/optional.hpp:367:10: note: candidate function [with Args = <>] not viable: no known conversion from 'typename ::boost::move_detail::remove_reference > &>::type' (aka 'std::__1::tuple >') to 'boost::optional_ns::in_place_init_t' for 1st argument void construct ( in_place_init_t, Args&&... args ) ^ /path/boost/1.62.0a-src/boost/boost/optional/optional.hpp:544:10: note: candidate function template not viable: requires 2 arguments, but 1 was provided void construct ( Expr&& factory, in_place_factory_base const* ) ^ /path/boost/1.62.0a-src/boost/boost/optional/optional.hpp:552:10: note: candidate function template not viable: requires 2 arguments, but 1 was provided void construct ( Expr&& factory, typed_in_place_factory_base const* ) ^ /path/boost/1.62.0a-src/boost/boost/optional/optional.hpp:614:10: note: candidate function template not viable: requires 2 arguments, but 1 was provided void construct ( Expr&& expr, void const* ) }}} Compiling with -std=c++11 and -stdlib=libc++ compiles fine. Compiling with -std=c++14 and -stdlib=libstdc++ compiles fine. Using std::experimental::optional instead of boost::optional compiles fine. Using boost::tuple instead of libc++ std::tuple compiles fine. So it seems to only be libc++ libc++ tuple with boost::optional and c++14. I am not sure the bug is actually a boost::optional bug, (it may be libc++ or clang) so if this is incorrect please let me know." Bugs closed Boost 1.63.0 optional Boost 1.62.0 Regression fixed