===================================================================
@@ -15932,10 +15932,17 @@ cp_parser_using_declaration (cp_parser* parser,
/* If we saw `typename', or didn't see `::', then there must be a
nested-name-specifier present. */
if (typename_p || !global_scope_p)
- qscope = cp_parser_nested_name_specifier (parser, typename_p,
- /*check_dependency_p=*/true,
- /*type_p=*/false,
- /*is_declaration=*/true);
+ {
+ qscope = cp_parser_nested_name_specifier (parser, typename_p,
+ /*check_dependency_p=*/true,
+ /*type_p=*/false,
+ /*is_declaration=*/true);
+ if (!qscope && !cp_parser_uncommitted_to_tentative_parse_p (parser))
+ {
+ cp_parser_skip_to_end_of_block_or_statement (parser);
+ return false;
+ }
+ }
/* Otherwise, we could be in either of the two productions. In that
case, treat the nested-name-specifier as optional. */
else
===================================================================
@@ -0,0 +1,12 @@
+// PR c++/60376
+// { dg-options -std=c++1y }
+
+struct A
+{
+ int foo();
+};
+
+template<typename> void bar()
+{
+ using (A().foo); // { dg-error "expected" }
+}
===================================================================
@@ -121,50 +121,3 @@ void test01()
// { dg-error "expected nested-name-specifier" "" { target *-*-* } 72 }
// { dg-error "expected nested-name-specifier" "" { target *-*-* } 73 }
// { dg-error "expected nested-name-specifier" "" { target *-*-* } 75 }
-
-// { dg-error "declared" "" { target *-*-* } 26 }
-// { dg-error "declared" "" { target *-*-* } 27 }
-// { dg-error "declared" "" { target *-*-* } 28 }
-// { dg-error "declared" "" { target *-*-* } 29 }
-// { dg-error "declared" "" { target *-*-* } 30 }
-// { dg-error "declared" "" { target *-*-* } 31 }
-// { dg-error "declared" "" { target *-*-* } 32 }
-// { dg-error "declared" "" { target *-*-* } 34 }
-// { dg-error "declared" "" { target *-*-* } 36 }
-// { dg-error "declared" "" { target *-*-* } 37 }
-// { dg-error "declared" "" { target *-*-* } 38 }
-// { dg-error "declared" "" { target *-*-* } 39 }
-// { dg-error "declared" "" { target *-*-* } 40 }
-// { dg-error "declared" "" { target *-*-* } 41 }
-// { dg-error "declared" "" { target *-*-* } 42 }
-// { dg-error "declared" "" { target *-*-* } 43 }
-// { dg-error "declared" "" { target *-*-* } 44 }
-// { dg-error "declared" "" { target *-*-* } 45 }
-// { dg-error "declared" "" { target *-*-* } 46 }
-// { dg-error "declared" "" { target *-*-* } 47 }
-// { dg-error "declared" "" { target *-*-* } 48 }
-// { dg-error "declared" "" { target *-*-* } 49 }
-// { dg-error "declared" "" { target *-*-* } 50 }
-// { dg-error "declared" "" { target *-*-* } 52 }
-// { dg-error "declared" "" { target *-*-* } 53 }
-// { dg-error "declared" "" { target *-*-* } 54 }
-// { dg-error "declared" "" { target *-*-* } 55 }
-// { dg-error "declared" "" { target *-*-* } 56 }
-// { dg-error "declared" "" { target *-*-* } 57 }
-// { dg-error "declared" "" { target *-*-* } 58 }
-// { dg-error "declared" "" { target *-*-* } 59 }
-// { dg-error "declared" "" { target *-*-* } 60 }
-// { dg-error "declared" "" { target *-*-* } 61 }
-// { dg-error "declared" "" { target *-*-* } 62 }
-// { dg-error "declared" "" { target *-*-* } 63 }
-// { dg-error "declared" "" { target *-*-* } 64 }
-// { dg-error "declared" "" { target *-*-* } 65 }
-// { dg-error "declared" "" { target *-*-* } 66 }
-// { dg-error "declared" "" { target *-*-* } 67 }
-// { dg-error "declared" "" { target *-*-* } 68 }
-// { dg-error "declared" "" { target *-*-* } 69 }
-// { dg-error "declared" "" { target *-*-* } 70 }
-// { dg-error "declared" "" { target *-*-* } 71 }
-// { dg-error "declared" "" { target *-*-* } 72 }
-// { dg-error "declared" "" { target *-*-* } 73 }
-// { dg-error "declared" "" { target *-*-* } 75 }