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?

Reply via email to