re PR c++/57526 (use of X before deduction of auto error for seemingly good code)
PR c++/57526 * semantics.c (lambda_capture_field_type): Build a DECLTYPE_TYPE if the variable type uses 'auto'. From-SVN: r200844
This commit is contained in:
parent
f9f91ddcf7
commit
d9fac9dd59
@ -1,5 +1,9 @@
|
||||
2013-07-09 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/57526
|
||||
* semantics.c (lambda_capture_field_type): Build a DECLTYPE_TYPE
|
||||
if the variable type uses 'auto'.
|
||||
|
||||
PR c++/57437
|
||||
* typeck.c (check_return_expr): Lambda proxies aren't eligible
|
||||
for nrv or return by move.
|
||||
|
@ -9177,7 +9177,7 @@ lambda_capture_field_type (tree expr, bool explicit_init_p)
|
||||
}
|
||||
else
|
||||
type = non_reference (unlowered_expr_type (expr));
|
||||
if (!type || WILDCARD_TYPE_P (type))
|
||||
if (!type || WILDCARD_TYPE_P (type) || type_uses_auto (type))
|
||||
{
|
||||
type = cxx_make_type (DECLTYPE_TYPE);
|
||||
DECLTYPE_TYPE_EXPR (type) = expr;
|
||||
|
24
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto3.C
Normal file
24
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-auto3.C
Normal file
@ -0,0 +1,24 @@
|
||||
// PR c++/57526
|
||||
// { dg-require-effective-target c++11 }
|
||||
|
||||
template<class T>
|
||||
struct A
|
||||
{
|
||||
void bar( ) { }
|
||||
|
||||
void foo( )
|
||||
{
|
||||
auto* this_ptr = this;
|
||||
auto lc = [&]( )
|
||||
{
|
||||
this_ptr->bar();
|
||||
};
|
||||
lc();
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
A<int> a;
|
||||
a.foo();
|
||||
}
|
Loading…
Reference in New Issue
Block a user