I'm not 100% sure if this is crazy or not, but it doesn't even seem to break any existing test cases.
We evaluate all integer expressions for overflows and diagnose them if possible. However, in the case of a constexpr function, we will evaluate the function (and all expressions it contains) anyway after parsing it, which will check for overflow again, so the previous checking is unnecessary.
I checked that not calling CheckForIntOverflow() at all breaks tests (it does).
You should add some documentation comments to the function.
One slight worry I have here is with dependent (perhaps special) member functions; is this function meant to answer "is this function callable in a constexpr context" or is it meant to answer "did the user specify this as a constexpr function"?
e.g.,