diff options
| author | Mark Mitchell <mark@codesourcery.com> | 2005-09-16 18:33:22 +0000 |
|---|---|---|
| committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2005-09-16 18:33:22 +0000 |
| commit | 49f210a23aa8c3633fc0151792742f9049b5d9c2 (patch) | |
| tree | 6c9c0e8718da769835c6cf3787e026c2fe767eb4 /gcc/cp/parser.c | |
| parent | 2749a92117493919d7ed5bbcaa04e2755b3385bc (diff) | |
| download | gcc-49f210a23aa8c3633fc0151792742f9049b5d9c2.zip gcc-49f210a23aa8c3633fc0151792742f9049b5d9c2.tar.gz gcc-49f210a23aa8c3633fc0151792742f9049b5d9c2.tar.bz2 | |
re PR c++/23914 (further 'non-constant' template argument case exposed by Boost)
PR c++/23914
* parser.c (cp_parser_enclosed_template_argument_list): Make sure
skip_evaluation is false when processing template arguments.
PR c++/23914
* g++.dg/template/static18.C: New test.
From-SVN: r104350
Diffstat (limited to 'gcc/cp/parser.c')
| -rw-r--r-- | gcc/cp/parser.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 0f8d17c..7284d4b 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -15411,6 +15411,7 @@ cp_parser_enclosed_template_argument_list (cp_parser* parser) tree saved_qualifying_scope; tree saved_object_scope; bool saved_greater_than_is_operator_p; + bool saved_skip_evaluation; /* [temp.names] @@ -15425,6 +15426,10 @@ cp_parser_enclosed_template_argument_list (cp_parser* parser) saved_scope = parser->scope; saved_qualifying_scope = parser->qualifying_scope; saved_object_scope = parser->object_scope; + /* We need to evaluate the template arguments, even though this + template-id may be nested within a "sizeof". */ + saved_skip_evaluation = skip_evaluation; + skip_evaluation = false; /* Parse the template-argument-list itself. */ if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER)) arguments = NULL_TREE; @@ -15474,6 +15479,7 @@ cp_parser_enclosed_template_argument_list (cp_parser* parser) parser->scope = saved_scope; parser->qualifying_scope = saved_qualifying_scope; parser->object_scope = saved_object_scope; + skip_evaluation = saved_skip_evaluation; return arguments; } |
