public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/99846] New: [11 regression] std::variant comparison operator error for recursive type
@ 2021-03-31  9:26 nilsgladitz at gmail dot com
  2021-03-31  9:56 ` [Bug libstdc++/99846] " rguenth at gcc dot gnu.org
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: nilsgladitz at gmail dot com @ 2021-03-31  9:26 UTC (permalink / raw)
  To: gcc-bugs

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

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2021-04-13 20:47 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-31  9:26 [Bug libstdc++/99846] New: [11 regression] std::variant comparison operator error for recursive type nilsgladitz at gmail dot com
2021-03-31  9:56 ` [Bug libstdc++/99846] " rguenth at gcc dot gnu.org
2021-04-08 13:24 ` rguenth at gcc dot gnu.org
2021-04-08 13:41 ` redi at gcc dot gnu.org
2021-04-08 13:42 ` redi at gcc dot gnu.org
2021-04-08 13:46 ` redi at gcc dot gnu.org
2021-04-13 14:33 ` redi at gcc dot gnu.org
2021-04-13 14:42 ` redi at gcc dot gnu.org
2021-04-13 15:06 ` ppalka at gcc dot gnu.org
2021-04-13 18:27 ` nilsgladitz at gmail dot com
2021-04-13 20:25 ` redi at gcc dot gnu.org
2021-04-13 20:47 ` redi at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).