// 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