`__decay_copy` is used by `std::thread`'s constructor to copy its arguments into the new thread. If `__decay_copy` claims to be noexcept, but then copying the argument does actually throw, we'd call std::terminate instead of passing this test. (And I've verified that adding an unconditional `noexcept` to `__decay_copy` does indeed fail this test.)
(This came out of review comments on D100255.)