mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 05:00:23 +08:00
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.
This commit is contained in:
parent
0a4a2667dc
commit
0a2fba3697
@ -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")
|
||||
|
7
gcc/testsuite/g++.dg/cpp23/subscript8.C
Normal file
7
gcc/testsuite/g++.dg/cpp23/subscript8.C
Normal file
@ -0,0 +1,7 @@
|
||||
// DR2507: Allow default arguments
|
||||
// { dg-additional-options {-std=c++23} }
|
||||
|
||||
struct A
|
||||
{
|
||||
void operator[](int, int = 42);
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user