https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105050
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- N.B. GCC 9 showed this instead of the "<statement>" part: x.ii:15:7: error: expression '(((expected<int>*)this)->expected<int>::has_value() ? ((& __x)->expected<int>::has_value() ? ({...}) : ({...})) : ((& __x)->expected<int>::has_value() ? ({...}) : ({...})))' is not a constant expression 15 | if (this->has_value()) | ^~ That doesn't tell you the problem either, and is unreadable (and misleading because there's no conditional expression in the original code). So shortening that to just "<statement>" was definitely an improvement. I think your note would make it even better.