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

Reply via email to