LWG-3466 "Specify the requirements for promise/future/shared_future consistently" adds a precondition to require the type argument for the primary promise, future, and shared_future templates to be a Cpp17Destructible object type. We should enforce that precondition with static_assert(s) that is_array_v<T> is false, is_object_v<T> is true, and is_destructible_v<T> is true for the type parameter T.