llvm/clang/test/Modules/GH60336-2.cpp

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