This patch fixes the following bugs:
- PR23256 tuple<A> is_constructible attempts tuple<A> to A conversion:
- Fix this by disabling the UTypes... overloads using the __disable_tuple_args_ctor<...> meta-function.
- PR22806 Move from destroyed object in tuple_cat of nested tuples
- Fix this by disabling the tuple-like overloads using the __disable_tuple_like_ctor<...> meta-function.
The goal of the __disable_*_ctor metafunctions is to disable obviously incorrect constructor overloads before they evaluate more SFINAE and cause a hard compile error. The implementation of these traits uses NO SFINAE that could result in a hard compile error. These must be safe to evaluate always.