seanbaxter / circle

The compiler is available for download. Get it!
http://www.circle-lang.org/
2.35k stars 72 forks source link

Using `--gcc-toolchain` with GCC 13 fails with `auto std::compare_three_way::operator()(_Tp&&, _Up&&) const fails requires-clause std::three_way_comparable_with<_Tp, _Up>` #145

Closed GavinRay97 closed 1 year ago

GavinRay97 commented 1 year ago

I'm trying to use GCC 13 from trunk with Circle, I'm compiling like below:

$ circle --std=c++2a --gcc-toolchain=/usr/local/gcc-13.0.0-dev -o main.cpp.o src/main.cpp

This gives:

$ circle --std=c++2a --gcc-toolchain=/usr/local/gcc-13.0.0-dev -o main.cpp.o src/main.cpp
error: /usr/local/gcc-13.0.0-dev/include/c++/13.0.0/type_traits:3347:61
... included from /usr/local/gcc-13.0.0-dev/include/c++/13.0.0/bits/move.h:57:10
... included from /usr/local/gcc-13.0.0-dev/include/c++/13.0.0/bits/exception_ptr.h:41:11
... included from /usr/local/gcc-13.0.0-dev/include/c++/13.0.0/exception:164:10
... included from /usr/local/gcc-13.0.0-dev/include/c++/13.0.0/ios:41:10
... included from /usr/local/gcc-13.0.0-dev/include/c++/13.0.0/ostream:40:10
... included from /usr/local/gcc-13.0.0-dev/include/c++/13.0.0/iostream:41:10
... included from src/main.cpp:1:10
unexpected type-name _From in initializer-clause
  inline constexpr bool is_convertible_v = __is_convertible(_From, _To); 
                                                            ^

error: auto std::compare_three_way::operator()(_Tp&&, _Up&&) const
failure during overload resolution for function auto std::compare_three_way::operator()(_Tp&&, _Up&&) const
  function declared at /usr/local/gcc-13.0.0-dev/include/c++/13.0.0/compare:549:7
/usr/local/gcc-13.0.0-dev/include/c++/13.0.0/system_error:168:38
    { return std::compare_three_way()(this, &__rhs); } 
                                     ^
  instantiation: /usr/local/gcc-13.0.0-dev/include/c++/13.0.0/compare:549:7
  during constraints checking of template std::compare_three_way::operator()
  template arguments: [
    '_Tp' = const std::error_category*
      class 'error_category' declared at /usr/local/gcc-13.0.0-dev/include/c++/13.0.0/system_error:106:3
    '_Up' = const std::error_category*
      class 'error_category' declared at /usr/local/gcc-13.0.0-dev/include/c++/13.0.0/system_error:106:3
  ]
        operator() [[nodiscard]] (_Tp&& __t, _Up&& __u) const 
        ^
    constraint: /usr/local/gcc-13.0.0-dev/include/c++/13.0.0/compare:547:16
    auto std::compare_three_way::operator()(_Tp&&, _Up&&) const fails requires-clause std::three_way_comparable_with<_Tp, _Up>
          requires three_way_comparable_with<_Tp, _Up> 
seanbaxter commented 1 year ago

Can't reproduce on recent builds. Might be fixed? Closing. Re-open if there's still an issue.