===================================================================
@@ -12655,11 +12655,9 @@ cp_parser_template_id (cp_parser *parser,
return error_mark_node;
}
/* Otherwise, emit an error about the invalid digraph, but continue
- 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"))
+ parsing because we got our argument list. */
+ if (permerror (next_token->location,
+ "%<<::%> cannot begin a template-argument list"))
{
static bool hint = false;
inform (next_token->location,
===================================================================
@@ -10,3 +10,6 @@ int main()
{
X<::A> x;
}
+
+int a;
+bool b = 0<::a;
===================================================================
@@ -31,5 +31,5 @@ class foo
};
void foo::x() throw(bar)
{
- if (!b) throw bar (static_cast<::N::X*>(this)); // { dg-error "lambda expressions|expected" } parse error
+ if (!b) throw bar (static_cast<::N::X*>(this)); // { dg-error "lambda expressions|expected|invalid" } parse error
}
===================================================================
@@ -2290,7 +2290,16 @@ _cpp_lex_direct (cpp_reader *pfile)
{
if (*buffer->cur == ':')
{
+ /* C++11 - 2.5 p3, bullet 2. */
+ if (CPP_OPTION (pfile, cplusplus)
+ && (CPP_OPTION (pfile, lang) == CLK_CXX11
+ || CPP_OPTION (pfile, lang) == CLK_GNUCXX11)
+ && buffer->cur[1] == ':'
+ && buffer->cur[2] != ':' && buffer->cur[2] != '>')
+ break;
+
buffer->cur++;
+
result->flags |= DIGRAPH;
result->type = CPP_OPEN_SQUARE;
}