1 // RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx23 -std=c++23 %s
2 // RUN: %clang_cc1 -fsyntax-only -verify=expected,cxx20 -std=c++20 %s
7 constexpr int operator[](int i
) {
10 constexpr int operator[](int a
, int b
) { // cxx20-error {{overloaded 'operator[]' cannot have more than one parameter before C++23}}
13 constexpr int operator[]() { // cxx20-error {{overloaded 'operator[]' cannot have no parameter before C++23}}
19 constexpr int operator[](int i
= 0) { // cxx20-error {{overloaded 'operator[]' cannot have a defaulted parameter before C++23}}
22 constexpr int operator[](int a
, int b
, int c
= 0) { // cxx20-error {{overloaded 'operator[]' cannot have a defaulted parameter before C++23}}\
23 // cxx20-error {{cannot have more than one parameter before C++23}}
28 template <typename
... T
>
30 constexpr auto operator[](T
&&...arg
); // cxx20-error {{overloaded 'operator[]' cannot have no parameter before C++23}} \
31 // cxx20-error {{overloaded 'operator[]' cannot have more than one parameter before C++23}}
34 T1
<> t10
; // cxx20-note {{requested here}}
35 T1
<int, int> t12
; // cxx20-note {{requested here}}
39 constexpr int operator[](auto &&...arg
) { return 0; }
45 (void)s
[1, 2]; // cxx20-warning {{left operand of comma operator has no effect}}\
46 // cxx20-warning {{top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23}}
47 (void)S
{}[]; // cxx20-error {{expected expression}}
50 (void)Defaults
{}[]; // cxx20-error {{expected expression}}
51 (void)Defaults
{}[1, 2]; // cxx20-warning {{left operand of comma operator has no effect}}\
52 // cxx20-warning {{top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23}}
54 Variadic
{}[]; // cxx20-error {{expected expression}}
56 Variadic
{}[1, 2]; // cxx20-warning {{left operand of comma operator has no effect}}\
57 // cxx20-warning {{top-level comma expression in array subscript is deprecated in C++20 and unsupported in C++23}}