1*ee01a2c3STianlan Zhou // RUN: %clang_cc1 -fsyntax-only -verify -std=c++23 %s
2*ee01a2c3STianlan Zhou
3*ee01a2c3STianlan Zhou // expected-no-diagnostics
4*ee01a2c3STianlan Zhou
5*ee01a2c3STianlan Zhou namespace A {
6*ee01a2c3STianlan Zhou
7*ee01a2c3STianlan Zhou struct Foo {
operator ()A::Foo8*ee01a2c3STianlan Zhou static int operator()(int a, int b) { return a + b; }
operator []A::Foo9*ee01a2c3STianlan Zhou static int operator[](int a, int b) { return a + b; }
10*ee01a2c3STianlan Zhou };
11*ee01a2c3STianlan Zhou
ok()12*ee01a2c3STianlan Zhou void ok() {
13*ee01a2c3STianlan Zhou // Should pass regardless of const / volatile
14*ee01a2c3STianlan Zhou Foo foo;
15*ee01a2c3STianlan Zhou foo(1, 2);
16*ee01a2c3STianlan Zhou foo[1, 2];
17*ee01a2c3STianlan Zhou
18*ee01a2c3STianlan Zhou const Foo fooC;
19*ee01a2c3STianlan Zhou fooC(1, 2);
20*ee01a2c3STianlan Zhou fooC[1, 2];
21*ee01a2c3STianlan Zhou
22*ee01a2c3STianlan Zhou const Foo fooV;
23*ee01a2c3STianlan Zhou fooV(1, 2);
24*ee01a2c3STianlan Zhou fooV[1, 2];
25*ee01a2c3STianlan Zhou
26*ee01a2c3STianlan Zhou const volatile Foo fooCV;
27*ee01a2c3STianlan Zhou fooCV(1, 2);
28*ee01a2c3STianlan Zhou fooCV[1, 2];
29*ee01a2c3STianlan Zhou }
30*ee01a2c3STianlan Zhou
31*ee01a2c3STianlan Zhou }
32