xref: /llvm-project/clang/test/SemaCXX/gh53815.cpp (revision d23ef9ef3685eb42ebf719bc28cfe2e4651932fc)
1*d23ef9efSSirraide // RUN: %clang_cc1 -fsyntax-only -verify -std=c++20 %s
2*d23ef9efSSirraide // expected-no-diagnostics
3*d23ef9efSSirraide 
4*d23ef9efSSirraide // Check that we don't crash due to forgetting to check for placeholders
5*d23ef9efSSirraide // in the RHS of '.*'.
6*d23ef9efSSirraide 
7*d23ef9efSSirraide template <typename Fn>
has_explicitly_named_overload()8*d23ef9efSSirraide static bool has_explicitly_named_overload() {
9*d23ef9efSSirraide   return requires { Fn().*&Fn::operator(); };
10*d23ef9efSSirraide }
11*d23ef9efSSirraide 
main()12*d23ef9efSSirraide int main() {
13*d23ef9efSSirraide   has_explicitly_named_overload<decltype([](auto){})>();
14*d23ef9efSSirraide }
15*d23ef9efSSirraide 
16*d23ef9efSSirraide template <typename Fn>
has_explicitly_named_overload_2()17*d23ef9efSSirraide constexpr bool has_explicitly_named_overload_2() {
18*d23ef9efSSirraide   return requires { Fn().*&Fn::operator(); };
19*d23ef9efSSirraide }
20*d23ef9efSSirraide 
__anon8cd60c130202(auto)21*d23ef9efSSirraide static_assert(!has_explicitly_named_overload_2<decltype([](auto){})>());
22