diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 0eefa740dc56..3fc73442da54 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -8262,7 +8262,7 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser, tree type = TREE_TYPE (postfix_expression); /* If we don't have a (type-dependent) object of class type, use typeof to figure out the type of the object. */ - if (type == NULL_TREE) + if (type == NULL_TREE || is_auto (type)) type = finish_typeof (postfix_expression); parser->context->object_type = type; } diff --git a/gcc/testsuite/g++.dg/cpp0x/auto57.C b/gcc/testsuite/g++.dg/cpp0x/auto57.C new file mode 100644 index 000000000000..fedcfde2f0c5 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/auto57.C @@ -0,0 +1,15 @@ +// PR c++/105734 +// { dg-do compile { target c++11 } } + +namespace N { + struct A { }; + A f(A); +} + +template +void bar() { + auto m = f(T()); + m.~A(); +} + +void foo() { bar(); }