Index: testsuite/g++.dg/cpp0x/auto25.C =================================================================== --- testsuite/g++.dg/cpp0x/auto25.C (revision 0) +++ testsuite/g++.dg/cpp0x/auto25.C (revision 0) @@ -0,0 +1,7 @@ +// PR c++/42056 +// { dg-options -std=c++0x } + +template struct A +{ + int a[auto(1)]; // { dg-error "invalid use of" } +}; Index: testsuite/g++.dg/cpp0x/auto26.C =================================================================== --- testsuite/g++.dg/cpp0x/auto26.C (revision 0) +++ testsuite/g++.dg/cpp0x/auto26.C (revision 0) @@ -0,0 +1,7 @@ +// PR c++/42056 +// { dg-options -std=c++0x } + +template void foo() +{ + int a[auto(1)]; // { dg-error "invalid use of" } +} Index: cp/typeck2.c =================================================================== --- cp/typeck2.c (revision 174321) +++ cp/typeck2.c (working copy) @@ -1599,6 +1599,13 @@ build_functional_cast (tree exp, tree parms, tsubs return error_mark_node; } + if (type_uses_auto (type)) + { + if (complain & tf_error) + error ("invalid use of %"); + type = error_mark_node; + } + if (processing_template_decl) { tree t;