[libc++] Recommit r363692 to implement P0608R3

Re-apply the change which was reverted in r363764 as-is after
breakages being resolved.  Thanks Eric Fiselier for working
hard on this.

See also: https://bugs.llvm.org/show_bug.cgi?id=42330

Differential Revision: https://reviews.llvm.org/D44865


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@363993 91177308-0d34-0410-b5e6-96231b3b80d8
6 files changed