This patch overhauls both specializations of unique_ptr while implementing the following LWG issues: * LWG 2801 - This issue constrains unique_ptr's constructors when the deleter type is not default constructible. Additionally it adds SFINAE conditions to unique_ptr<T[]>::unique_ptr(Up). * LWG 2905 - This issue reworks the unique_ptr(pointer, /* see below */ deleter) constructors so that they correctly SFINAE when the deleter argument cannot be used to construct the stored deleter. * LWG 2520 - This issue fixes initializing unique_ptr<T[]> from nullptr. Libc++ had previously implemented this issue, but the suggested resolution still broke initialization from NULL. This patch re-works the unique_ptr<T[]>(Up, deleter) overloads so that they accept NULL as well as nullptr. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@300406 91177308-0d34-0410-b5e6-96231b3b80d8
Test Naming and Directory Structure =================================== The directory structure for the unique_ptr class templates differs from the normal test directory naming conventions (e.g. matching the stable name in the standard). Instead of having a [unique.ptr.single] and [unique.ptr.runtime] directory, each containing their own tests, a single directory, "unique.ptr.class", contains both sets of tests. This allows the common behavior of the two unique_ptr specializations to be tested in the same place without duplication. Tests specific to [unique.ptr.single] have the suffix ".single.pass.cpp" and those specific to [unique.ptr.runtime] are named "*.runtime.pass.cpp". Tests for both specializations are named normally.