diff options
author | Jason Merrill <jason@redhat.com> | 2022-09-06 14:18:39 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2022-09-06 16:20:41 -0400 |
commit | 0a2fba3697411c07a8330abfe7460ce62bce5e7f (patch) | |
tree | 12fda6644d4eba70bc673e621d8c5d37764aeaf4 | |
parent | 0a4a2667dc115ca73b552fcabf8570620dfbe55f (diff) | |
download | gcc-0a2fba3697411c07a8330abfe7460ce62bce5e7f.zip gcc-0a2fba3697411c07a8330abfe7460ce62bce5e7f.tar.gz gcc-0a2fba3697411c07a8330abfe7460ce62bce5e7f.tar.bz2 |
c++: C++23 operator[] allows default arguments
This usage was intended to be allowed by P2128, but it didn't make it into
the final wording. Fixed by CWG 2507.
DR2507
gcc/cp/ChangeLog:
* decl.cc (grok_op_properties): Return sooner for C++23 op[].
gcc/testsuite/ChangeLog:
* g++.dg/cpp23/subscript8.C: New test.
-rw-r--r-- | gcc/cp/decl.cc | 11 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp23/subscript8.C | 7 |
2 files changed, 12 insertions, 6 deletions
diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index b72b2a8..6d20765 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -15331,6 +15331,11 @@ grok_op_properties (tree decl, bool complain) "operator ()". */ return true; + /* C++23 allows an arbitrary number of parameters and default arguments for + operator[], and none of the other checks below apply. */ + if (operator_code == ARRAY_REF && cxx_dialect >= cxx23) + return true; + if (operator_code == COND_EXPR) { /* 13.4.0.3 */ @@ -15344,10 +15349,6 @@ grok_op_properties (tree decl, bool complain) { if (!arg) { - /* Variadic. */ - if (operator_code == ARRAY_REF && cxx_dialect >= cxx23) - break; - error_at (loc, "%qD must not have variable number of arguments", decl); return false; @@ -15408,8 +15409,6 @@ grok_op_properties (tree decl, bool complain) case OVL_OP_FLAG_BINARY: if (arity != 2) { - if (operator_code == ARRAY_REF && cxx_dialect >= cxx23) - break; error_at (loc, methodp ? G_("%qD must have exactly one argument") diff --git a/gcc/testsuite/g++.dg/cpp23/subscript8.C b/gcc/testsuite/g++.dg/cpp23/subscript8.C new file mode 100644 index 0000000..fe00035 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp23/subscript8.C @@ -0,0 +1,7 @@ +// DR2507: Allow default arguments +// { dg-additional-options {-std=c++23} } + +struct A +{ + void operator[](int, int = 42); +}; |