|  | // RUN: rm -rf %t | 
|  | // RUN: %clang_cc1 -x c++ -std=c++20 %s -verify -fmodules -fmodules-cache-path=%t | 
|  | // expected-no-diagnostics | 
|  |  | 
|  | #pragma clang module build std | 
|  | module std { | 
|  | module concepts {} | 
|  | module functional {} | 
|  | } | 
|  | #pragma clang module contents | 
|  | #pragma clang module begin std | 
|  |  | 
|  | template <class _Tp> struct common_reference { | 
|  | using type = _Tp; | 
|  | }; | 
|  |  | 
|  | #pragma clang module end | 
|  | #pragma clang module begin std.concepts | 
|  | #pragma clang module import std | 
|  |  | 
|  | template <class _Tp> | 
|  | concept same_as = __is_same(_Tp, _Tp); | 
|  |  | 
|  | template <class _Tp> | 
|  | concept common_reference_with = | 
|  | same_as<typename common_reference<_Tp>::type>; | 
|  |  | 
|  | #pragma clang module end | 
|  | #pragma clang module begin std.functional | 
|  | #pragma clang module import std.concepts | 
|  |  | 
|  | template <class, class _Ip> | 
|  | concept sentinel_for = common_reference_with<_Ip>; | 
|  |  | 
|  | constexpr bool ntsf_subsumes_sf(sentinel_for<char *> auto) | 
|  | requires true | 
|  | { | 
|  | return true; | 
|  | } | 
|  | bool ntsf_subsumes_sf(sentinel_for<char *> auto); | 
|  | static_assert(ntsf_subsumes_sf("")); | 
|  |  | 
|  | #pragma clang module end | 
|  | #pragma clang module endbuild |