https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86369
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- constexpr evaluation shouldn't blindly call fold* if it doesn't expect things to end up constant that are not or non-constant that are. fold* is _not_ a constexpr evaluator in the C++ semantic sense. So no, match.pd isn't at fault and we shouldn't change it. Fix the constexpr code instead.