https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77802
Bug ID: 77802 Summary: [7 Regression] Boost Fiber doesn't compile Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: trippels at gcc dot gnu.org CC: ville.voutilainen at gmail dot com Target Milestone: --- Boost-1.62 doesn't build on trunk: $ cat tup.cpp #include <tuple> template <typename... Args> struct execution_context { typedef std::tuple<Args...> args_tpl_t; typedef std::tuple<execution_context, typename std::decay<Args>::type...> ret_tpl_t; execution_context(); execution_context(execution_context &&); ret_tpl_t operator()() { args_tpl_t data; return tuple_cat(std::forward_as_tuple(execution_context()), data); } }; void fn1() { execution_context<int> cc; cc(); } $ clang++ -stdlib=libc++ -c tup.cpp $ g++-6 -c tup.cpp $ g++-trunk -c tup.cpp In file included from tup.cpp:1:0: /usr/lib/gcc/x86_64-pc-linux-gnu/7.0.0/include/g++-v7/tuple: In instantiation of ‘constexpr std::_Head_base<_Idx, _Head, true>::_Head_base(_UHead&&) [with _UHead = execution_context<int>&; long unsigned int _Idx = 0ul; _Head = execution_context<int>]’: /usr/lib/gcc/x86_64-pc-linux-gnu/7.0.0/include/g++-v7/tuple:235:57: required from ‘constexpr std::_Tuple_impl<_Idx, _Head, _Tail ...>::_Tuple_impl(const std::_Tuple_impl<_Idx, _UElements ...>&) [with _UElements = {execution_context<int>&&, int}; long unsigned int _Idx = 0ul; _Head = execution_context<int>; _Tail = {int}]’ /usr/lib/gcc/x86_64-pc-linux-gnu/7.0.0/include/g++-v7/tuple:1041:60: required from ‘constexpr std::tuple<_T1, _T2>::tuple(std::tuple<_U1, _U2>&&) [with _U1 = execution_context<int>&&; _U2 = int; typename std::enable_if<(std::_TC<true, _T1, _T2>::_MoveConstructibleTuple<_U1, _U2>() && std::_TC<true, _T1, _T2>::_ImplicitlyMoveConvertibleTuple<_U1, _U2>()), bool>::type <anonymous> = 1u; _T1 = execution_context<int>; _T2 = int]’ tup.cpp:10:70: required from ‘execution_context<Args>::ret_tpl_t execution_context<Args>::operator()() [with Args = {int}; execution_context<Args>::ret_tpl_t = std::tuple<execution_context<int>, int>]’ tup.cpp:15:6: required from here /usr/lib/gcc/x86_64-pc-linux-gnu/7.0.0/include/g++-v7/tuple:87:35: error: use of deleted function ‘constexpr execution_context<int>::execution_context(const execution_context<int>&)’ : _Head(std::forward<_UHead>(__h)) { } ^ tup.cpp:2:36: note: ‘constexpr execution_context<int>::execution_context(const execution_context<int>&)’ is implicitly declared as deleted because ‘execution_context<int>’ declares a move constructor or move assignment operator template <typename... Args> struct execution_context { ^~~~~~~~~~~~~~~~~