https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99846
Bug ID: 99846 Summary: [11 regression] std::variant comparison operator error for recursive type Product: gcc Version: 11.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: nilsgladitz at gmail dot com Target Milestone: --- Created attachment 50491 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50491&action=edit Test case source code The attached source is a test case I reduced from a JSON like library that uses std::variant to store alternate value types. This still builds with GCC 10.2.0 but fails in 11.0.1 (g65374af219f) with: /opt/gcc/git-snapshot/include/c++/11.0.1/compare: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/compare:893:10: required by substitution of ‘template<class _Tp, class _Up> constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/compare: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/compare:894:10: required by substitution of ‘template<class _Tp, class _Up> constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/concepts: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required from ‘static constexpr bool std::__detail::_Synth3way::_S_noexcept(const _Tp*, const _Up*) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:890:32: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/concepts: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:307:10: required from ‘static constexpr bool std::__detail::_Synth3way::_S_noexcept(const _Tp*, const _Up*) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:890:32: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/concepts: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:308:10: required from ‘static constexpr bool std::__detail::_Synth3way::_S_noexcept(const _Tp*, const _Up*) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:890:32: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/concepts: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:309:10: required from ‘static constexpr bool std::__detail::_Synth3way::_S_noexcept(const _Tp*, const _Up*) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:890:32: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/concepts: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:310:10: required from ‘static constexpr bool std::__detail::_Synth3way::_S_noexcept(const _Tp*, const _Up*) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:890:32: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/concepts: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:311:10: required from ‘static constexpr bool std::__detail::_Synth3way::_S_noexcept(const _Tp*, const _Up*) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:890:32: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/concepts: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:312:10: required from ‘static constexpr bool std::__detail::_Synth3way::_S_noexcept(const _Tp*, const _Up*) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:890:32: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/concepts: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:313:10: required from ‘static constexpr bool std::__detail::_Synth3way::_S_noexcept(const _Tp*, const _Up*) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:890:32: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/compare: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/compare:424:8: required from ‘static constexpr bool std::__detail::_Synth3way::_S_noexcept(const _Tp*, const _Up*) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:890:32: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/compare: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/compare:884:27: required from ‘static constexpr bool std::__detail::_Synth3way::_S_noexcept(const _Tp*, const _Up*) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:890:32: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/compare: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/compare:884:52: required from ‘static constexpr bool std::__detail::_Synth3way::_S_noexcept(const _Tp*, const _Up*) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:890:32: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/compare: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/compare:901:16: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself /opt/gcc/git-snapshot/include/c++/11.0.1/compare: In substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’: /opt/gcc/git-snapshot/include/c++/11.0.1/compare:903:21: required from ‘constexpr auto std::__detail::_Synth3way::operator()(const _Tp&, const _Up&) const requires requires{{std::__detail::_Synth3way::operator()::__t < std::__detail::_Synth3way::operator()::__u} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];{std::__detail::_Synth3way::operator()::__u < std::__detail::_Synth3way::operator()::__t} -> decltype(auto) [requires std::__detail::__boolean_testable<<placeholder>, >];} [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/compare:914:34: required by substitution of ‘template<class _Tp, class _Up> using __synth3way_t = decltype (std::__detail::__synth3way(declval<_Tp&>(), declval<_Up&>())) [with _Tp = Value; _Up = Value]’ /opt/gcc/git-snapshot/include/c++/11.0.1/bits/stl_list.h:2030:5: required by substitution of ‘template<class _Tp, class _Alloc> std::__detail::__synth3way_t<_T1> std::operator<=>(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&) [with _Tp = Value; _Alloc = std::allocator<Value>]’ /opt/gcc/git-snapshot/include/c++/11.0.1/concepts:306:10: required by substitution of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&) [with _Types = {std::__cxx11::list<Value, std::allocator<Value> >}]’ test.cpp:16:16: required from here /opt/gcc/git-snapshot/include/c++/11.0.1/variant:1218:5: required by the constraints of ‘template<class ... _Types> requires (three_way_comparable<_Types, std::partial_ordering> && ...) constexpr std::common_comparison_category_t<std::compare_three_way_result_t<_Types, _Types>...> std::operator<=>(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ cc1plus: error: satisfaction of atomic constraint ‘(three_way_comparable<_Types, std::partial_ordering> && ...) [with _Types = {_Types ...}]’ depends on itself