http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56895
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-04-09 18:15:51 UTC --- So: @@ -4178,7 +4178,8 @@ cp_build_binary_op (location_t location, } else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) { - tree const_op1 = maybe_constant_value (op1); + tree const_op1 = fold_non_dependent_expr_sfinae (op1, tf_none); + const_op1 = maybe_constant_value (const_op1); if (TREE_CODE (const_op1) != INTEGER_CST) const_op1 = op1; result_type = type0; ? Seems to work on this testcase.