https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83692

--- Comment #5 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
There's a lot that goes on here but the gist is this.  In C++17 cp_finish_decl
sees "o" initialized with "{}".  check_initializer turns this into

o = TARGET_EXPR <D.2208, <<< Unknown tree: aggr_init_expr
  4
  __ct_comp 
  D.2208
  (struct outer *) <<< Unknown tree: void_cst >>> >>>>

this goes to store_init_value and that calls cxx_constant_value on that
TARGET_EXPR (which means strict = true).  That evaluates the AGGR_INIT_EXPR
inside by evaluating the constructor of outer:

        if (m_x.value() != 0)
throw 0;
                m_x.m_value = integer{1}.value();
                if (m_x.value() != 1) throw 0;

Reply via email to