Comments
Patch
commit 820655889d7ea9f825769286823241fd6d0fbae5
Author: Jason Merrill <jason@redhat.com>
Date: Tue Sep 6 22:01:35 2011 -0400
PR c++/50298
* parser.c (cp_parser_member_declaration): Don't require a constant
rvalue here in C++0x.
@@ -18187,6 +18187,17 @@ cp_parser_member_declaration (cp_parser* parser)
initializer_token_start = cp_lexer_peek_token (parser->lexer);
if (function_declarator_p (declarator))
initializer = cp_parser_pure_specifier (parser);
+ else if (cxx_dialect >= cxx0x)
+ {
+ bool nonconst;
+ /* Don't require a constant rvalue in C++11, since we
+ might want a reference constant. We'll enforce
+ constancy later. */
+ cp_lexer_consume_token (parser->lexer);
+ /* Parse the initializer. */
+ initializer = cp_parser_initializer_clause (parser,
+ &nonconst);
+ }
else
/* Parse the initializer. */
initializer = cp_parser_constant_initializer (parser);
new file mode 100644
@@ -0,0 +1,10 @@
+// PR c++/50298
+// { dg-options -std=c++0x }
+
+int global_variable;
+
+template <class T> struct X {
+ static constexpr T r = global_variable;
+};
+
+X<int&> x;