In std::tuple, we should try to avoid calling std::is_copy_constructible
whenever we can to avoid surprising interactions with (I believe) compiler
builtins. This bug was reported in https://reviews.llvm.org/D96523#2730953.
The issue was that when tuple<_Up...> was the same as tuple<_Tp...>, we
would short-circuit the _Or (because sizeof...(_Tp) != 1) and go evaluate
the following is_constructible<_Tp, const _Up&>....
Instead, after this patch, we check whether the constructed-from tuple
is the same as the current tuple regardless of the number of elements,
since we should always prefer the normal copy constructor in that case
anyway.
I'd like to see this test additionally test with std::any itself — since this is kind of a subtle interaction between the metaprogramming in both libc++ tuple and libc++ any, right? Could go in this same file, just under TEST_STD_VER >= 17; or could go into copy.with_std_any.compile.pass.cpp or something.