http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55081
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org,
| |jason at gcc dot gnu.org
Target Milestone|--- |4.8.0
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-10-26
14:49:20 UTC ---
Works fine with -std=c++11.
In store_init we have:
/* In C++0x constant expression is a semantic, not syntactic, property.
In C++98, make sure that what we thought was a constant expression at
template definition time is still constant. */
if ((cxx_dialect >= cxx0x
|| DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
&& (decl_maybe_constant_var_p (decl)
|| TREE_STATIC (decl)))
but here DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) isn't set and
cxx_dialect < cxx0x for -std=c++98. Not sure what we should do here, either
just call maybe_constant_value or maybe_constant_init otherwise to fold sizeof,
or, if it is really not appropriate for C++98 as an optimization,
fold_sizeof_expr_r recursively plus fold. Jason, what do you think?