return error_mark_node;
}
/* Otherwise, emit an error about the invalid digraph, but continue
- parsing because we got our argument list. */
- if (permerror (next_token->location,
- "%<<::%> cannot begin a template-argument list"))
+ parsing because we got our argument list. In C++11 do not emit
+ any error, per 2.5/3. */
+ if (cxx_dialect < cxx0x
+ && permerror (next_token->location,
+ "%<<::%> cannot begin a template-argument list"))
{
static bool hint = false;
inform (next_token->location,
" Insert whitespace between %<<%> and %<::%>");
if (!hint && !flag_permissive)
{
- inform (next_token->location, "(if you use %<-fpermissive%>"
- " G++ will accept your code)");
+ inform (next_token->location, "(if you use %<-fpermissive%> "
+ "or %<-std=c++11%>, or %<-std=gnu++11%> G++ will "
+ "accept your code)");
hint = true;
}
}
};
void method(void) {
- typename Foo<::B>::template Nested<::B> n; // { dg-error "17:'<::' cannot begin" "17-begin" }
-// { dg-message "17:'<:' is an alternate spelling" "17-alt" { target *-*-* } 19 }
-// { dg-error "39:'<::' cannot begin" "39-begin" { target *-*-* } 19 }
-// { dg-message "39:'<:' is an alternate spelling" "39-alt" { target *-*-* } 19 }
+ typename Foo<::B>::template Nested<::B> n; // { dg-error "17:'<::' cannot begin" "17-begin" { target c++98 } }
+// { dg-message "17:'<:' is an alternate spelling" "17-alt" { target c++98 } 19 }
+// { dg-error "39:'<::' cannot begin" "39-begin" { target c++98 } 19 }
+// { dg-message "39:'<:' is an alternate spelling" "39-alt" { target c++98 } 19 }
n.template Nested<B>::method();
- n.template Nested<::B>::method(); // { dg-error "22:'<::' cannot begin" "error" }
-// { dg-message "22:'<:' is an alternate" "note" { target *-*-* } 24 }
+ n.template Nested<::B>::method(); // { dg-error "22:'<::' cannot begin" "error" { target c++98 } }
+// { dg-message "22:'<:' is an alternate" "note" { target c++98 } 24 }
Nested<B>::method();
- Nested<::B>::method(); // { dg-error "11:'<::' cannot begin" "error" }
-// { dg-message "11:'<:' is an alternate" "note" { target *-*-* } 27 }
+ Nested<::B>::method(); // { dg-error "11:'<::' cannot begin" "error" { target c++98 } }
+// { dg-message "11:'<:' is an alternate" "note" { target c++98 } 27 }
}
};
template <int N> struct Foo2 {};
-template struct Foo2<::B>; // { dg-error "21:'<::' cannot begin" "begin" }
-// { dg-message "21:'<:' is an alternate" "alt" { target *-*-* } 33 }
+template struct Foo2<::B>; // { dg-error "21:'<::' cannot begin" "begin" { target c++98 } }
+// { dg-message "21:'<:' is an alternate" "alt" { target c++98 } 33 }
// { dg-message "25:type/value mismatch" "mismatch" { target *-*-* } 33 }
// { dg-error "25:expected a constant" "const" { target *-*-* } 33 }
void func(void)
{
- Foo<::B> f; // { dg-error "cannot begin" "begin" }
-// { dg-message "alternate spelling" "alt" { target *-*-* } 42 }
+ Foo<::B> f; // { dg-error "cannot begin" "begin" { target c++98 } }
+// { dg-message "alternate spelling" "alt" { target c++98 } 42 }
f.Foo<B>::method();
- f.Foo<::B>::method(); // { dg-error "8:cannot begin" "begin" }
-// { dg-message "8:alternate spelling" "alt" { target *-*-* } 45 }
+ f.Foo<::B>::method(); // { dg-error "8:cannot begin" "begin" { target c++98 } }
+// { dg-message "8:alternate spelling" "alt" { target c++98 } 45 }
// Check cases where we the token sequence is the correct one, but there
// was no digraph or whitespaces in the middle, so we should not emit
Foo[::value] = 0;
}
-template struct Foo<::B>; // { dg-error "20:'<::' cannot begin" "begin" }
-// { dg-message "20:is an alternate" "alt" { target *-*-* } 66 }
+template struct Foo<::B>; // { dg-error "20:'<::' cannot begin" "begin" { target c++98 } }
+// { dg-message "20:is an alternate" "alt" { target c++98 } 66 }
// On the first error message, an additional note about the use of
// -fpermissive should be present
-// { dg-message "17:\\(if you use '-fpermissive' G\\+\\+ will accept your code\\)" "-fpermissive" { target *-*-* } 19 }
+// { dg-message "17:\\(if you use '-fpermissive' or '-std=c\\+\\+11', or '-std=gnu\\+\\+11' G\\+\\+ will accept your code\\)" "-fpermissive" { target c++98 } 19 }