https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103951

--- Comment #2 from 康桓瑋 <hewillk at gmail dot com> ---
Here is the reduced version without the header:

template<class T> 
T&& declval() noexcept;

struct true_type {
  static constexpr bool value = true;
};

template<typename _From, typename _To>
class is_convertible {
  template<typename _To1>
  static void __test_aux(_To1) noexcept;

  template<typename _From1, typename _To1,
           typename = decltype(__test_aux<_To1>(declval<_From1>()))>
  static true_type __test(int);

 public:
  static constexpr bool value = decltype(__test<_From, _To>(0))::value;
};

template<typename _Tp>
void __decay_copy(_Tp) noexcept(is_convertible<_Tp, _Tp>::value);

template<class _Tp>
concept range = requires(_Tp& __t) {
  __decay_copy(__t.begin());
};

struct string_view {
  template<range R>
  string_view(R&&);
};

struct Iter {
  Iter(string_view);
  Iter begin() const { return *this; }
};

https://godbolt.org/z/nrcq84dno

Reply via email to