https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83692
--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Seems like in C++17 the condition in if (m_x.value() != 1) throw 0; gets evaluated to 1 instead of 0, so we try to evaluate the "throw 0" but that can't be evaluated to a constant value. Maybe some bad caching in constexpr_call_cache.