| // RUN: %clang_cc1 -std=c++23 -emit-module-interface %t/a.cppm -o %t/a.pcm |
| // RUN: %clang_cc1 -std=c++23 %t/b.cpp -fmodule-file=a=%t/a.pcm -fsyntax-only -verify |
| // RUN: %clang_cc1 -std=c++23 -emit-reduced-module-interface %t/a.cppm -o %t/a.pcm |
| // RUN: %clang_cc1 -std=c++23 %t/b.cpp -fmodule-file=a=%t/a.pcm -fsyntax-only -verify |
| template<class _Tp, class _Up> |
| concept __comparable = requires (_Tp &&__t, _Up &&__u) { |
| { __t.end() } -> __comparable<TypeA>; |
| requires __member_end<_Tp> |
| constexpr auto operator()(_Tp&& __t) const |
| void operator()(auto&&) const = delete; |
| inline constexpr auto end = __end::__fn{}; |
| concept range = requires(_Tp& __t) { |
| TypeA end() { return {}; } |
| a_view(_Range) -> a_view<int>; |
| constexpr bool operator==(TypeA, TypeA) { |
| // We need to mention the 'operator==' explicitly to make sure it won't be |
| export using ::operator==; |
| // expected-no-diagnostics |