https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109775
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- It has to do with parsing here: GCC starts parsing it as a function declaration and then backs out but had already warned/errored out about the VLA. If you change the code to: D const pp{D(v_[i]) * o.v_[S - i]}; Then there is no ambiguity in parsing this.