3 // RUN: split-file %s %t
5 // RUN: %clang_cc1 -std=c++23 -emit-module-interface %t/a.cppm -o %t/a.pcm
6 // RUN: %clang_cc1 -std=c++23 %t/b.cpp -fmodule-file=a=%t/a.pcm -fsyntax-only -verify
8 // RUN: %clang_cc1 -std=c++23 -emit-reduced-module-interface %t/a.cppm -o %t/a.pcm
9 // RUN: %clang_cc1 -std=c++23 %t/b.cpp -fmodule-file=a=%t/a.pcm -fsyntax-only -verify
14 template<class _Tp, class _Up>
15 concept __comparable = requires (_Tp &&__t, _Up &&__u) {
22 concept __member_end =
24 { __t.end() } -> __comparable<TypeA>;
29 requires __member_end<_Tp>
30 constexpr auto operator()(_Tp&& __t) const
35 void operator()(auto&&) const = delete;
39 inline namespace __cpo {
40 inline constexpr auto end = __end::__fn{};
45 concept range = requires(_Tp& __t) {
53 TypeA end() { return {}; }
62 template <range _Range>
63 a_view(_Range) -> a_view<int>;
65 constexpr bool operator==(TypeA, TypeA) {
74 export using ::a_view;
76 // We need to mention the 'operator==' explicitly to make sure it won't be
78 export using ::operator==;
81 // expected-no-diagnostics