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