if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THIS))
{
location_t loc = cp_lexer_peek_token (parser->lexer)->location;
- if (cxx_dialect < cxx20
+ if (cxx_dialect < cxx20 && pedantic
&& LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr) == CPLD_COPY)
- pedwarn (loc, 0, "explicit by-copy capture of %<this%> redundant "
- "with by-copy capture default");
+ pedwarn (loc, OPT_Wc__20_extensions,
+ "explicit by-copy capture of %<this%> "
+ "with by-copy capture default only available with "
+ "%<-std=c++20%> or %<-std=gnu++20%>");
cp_lexer_consume_token (parser->lexer);
if (LAMBDA_EXPR_THIS_CAPTURE (lambda_expr))
pedwarn (input_location, 0,
auto i = [=] { return a; }; // { dg-warning "implicit capture" "" { target c++2a } }
auto j = [&] { return a; };
// P0409R2 - C++2A lambda capture [=, this]
- auto k = [=, this] { return a; };// { dg-error "explicit by-copy capture of 'this' redundant with by-copy capture default" "" { target c++17_down } }
+ auto k = [=, this] { return a; };// { dg-error "explicit by-copy capture of 'this' with by-copy capture default only available with" "" { target c++17_down } }
auto l = [&, this] { return a; };
auto m = [=, *this] { return a; };// { dg-error "'*this' capture only available with" "" { target c++14_down } }
auto n = [&, *this] { return a; };// { dg-error "'*this' capture only available with" "" { target c++14_down } }
// { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
auto q = [=, this, *this] { return a; };// { dg-error "already captured 'this'" }
// { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
- // { dg-error "explicit by-copy capture of 'this' redundant with by-copy capture default" "" { target c++17_down } .-2 }
+ // { dg-error "explicit by-copy capture of 'this' with by-copy capture default only available with" "" { target c++17_down } .-2 }
auto r = [=, this, this] { return a; };// { dg-error "already captured 'this'" }
- // { dg-error "explicit by-copy capture of 'this' redundant with by-copy capture default" "" { target c++17_down } .-1 }
+ // { dg-error "explicit by-copy capture of 'this' with by-copy capture default only available with" "" { target c++17_down } .-1 }
auto s = [=, *this, this] { return a; };// { dg-error "already captured 'this'" }
// { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
- // { dg-error "explicit by-copy capture of 'this' redundant with by-copy capture default" "" { target c++17_down } .-2 }
+ // { dg-error "explicit by-copy capture of 'this' with by-copy capture default only available with" "" { target c++17_down } .-2 }
auto t = [=, *this, *this] { return a; };// { dg-error "already captured 'this'" }
// { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
auto u = [&, this, *this] { return a; };// { dg-error "already captured 'this'" }