aboutsummaryrefslogtreecommitdiff
path: root/test/std/utilities
diff options
context:
space:
mode:
Diffstat (limited to 'test/std/utilities')
-rw-r--r--test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp8
-rw-r--r--test/std/utilities/meta/meta.help/integral_constant.pass.cpp6
-rw-r--r--test/std/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp4
-rw-r--r--test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp4
-rw-r--r--test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp4
-rw-r--r--test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp4
-rw-r--r--test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp4
-rw-r--r--test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp4
-rw-r--r--test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp4
-rw-r--r--test/std/utilities/optional/optional.hash/hash.pass.cpp12
-rw-r--r--test/std/utilities/optional/optional.relops/equal.pass.cpp2
-rw-r--r--test/std/utilities/optional/optional.relops/greater_equal.pass.cpp2
-rw-r--r--test/std/utilities/optional/optional.relops/greater_than.pass.cpp2
-rw-r--r--test/std/utilities/optional/optional.relops/less_equal.pass.cpp2
-rw-r--r--test/std/utilities/optional/optional.relops/less_than.pass.cpp2
-rw-r--r--test/std/utilities/optional/optional.relops/not_equal.pass.cpp2
-rw-r--r--test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move_convert.runtime.pass.cpp3
-rw-r--r--test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.ctor/default.pass.cpp2
-rw-r--r--test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.ctor/move_convert.pass.cpp103
-rw-r--r--test/std/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp2
-rw-r--r--test/std/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp2
-rw-r--r--test/std/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.cons/default.pass.cpp3
-rw-r--r--test/std/utilities/time/time.duration/time.duration.cons/rep.pass.cpp3
-rw-r--r--test/std/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp4
-rw-r--r--test/std/utilities/time/time.duration/time.duration.special/max.pass.cpp3
-rw-r--r--test/std/utilities/time/time.duration/time.duration.special/min.pass.cpp3
-rw-r--r--test/std/utilities/time/time.duration/time.duration.special/zero.pass.cpp3
-rw-r--r--test/std/utilities/time/time.traits/time.traits.duration_values/max.pass.cpp3
-rw-r--r--test/std/utilities/time/time.traits/time.traits.duration_values/min.pass.cpp3
-rw-r--r--test/std/utilities/time/time.traits/time.traits.duration_values/zero.pass.cpp3
-rw-r--r--test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.pass.cpp2
-rw-r--r--test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct.pass.cpp4
-rw-r--r--test/std/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp4
46 files changed, 201 insertions, 67 deletions
diff --git a/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp b/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp
index fc346d4dce7d..78b04d8615b3 100644
--- a/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp
+++ b/test/std/utilities/memory/util.smartptr/util.smartptr.hash/hash_unique_ptr.pass.cpp
@@ -50,7 +50,7 @@ namespace std {
template <class T>
struct hash<::min_pointer<T, std::integral_constant<size_t, 1>>> {
- size_t operator()(::min_pointer<T, std::integral_constant<size_t, 1>> p) const noexcept(false) {
+ size_t operator()(::min_pointer<T, std::integral_constant<size_t, 1>> p) const TEST_NOEXCEPT_FALSE {
if (!p) return 0;
return std::hash<T*>{}(std::addressof(*p));
}
@@ -67,12 +67,16 @@ int main()
int* ptr = new int;
std::unique_ptr<int> p(ptr);
std::hash<std::unique_ptr<int> > f;
- ASSERT_NOT_NOEXCEPT(f(p));
std::size_t h = f(p);
assert(h == std::hash<int*>()(ptr));
}
#if TEST_STD_VER >= 11
{
+ std::unique_ptr<int, PointerDeleter<int, 1>> pThrowingHash;
+ std::hash<std::unique_ptr<int, PointerDeleter<int, 1>>> fThrowingHash;
+ ASSERT_NOT_NOEXCEPT(fThrowingHash(pThrowingHash));
+ }
+ {
test_enabled_with_deleter<int, Deleter<int>>();
test_enabled_with_deleter<int[], Deleter<int[]>>();
test_enabled_with_deleter<int, CopyDeleter<int>>();
diff --git a/test/std/utilities/meta/meta.help/integral_constant.pass.cpp b/test/std/utilities/meta/meta.help/integral_constant.pass.cpp
index 51a837e4e032..bf8aa0453e97 100644
--- a/test/std/utilities/meta/meta.help/integral_constant.pass.cpp
+++ b/test/std/utilities/meta/meta.help/integral_constant.pass.cpp
@@ -22,11 +22,11 @@ int main()
static_assert(_5::value == 5, "");
static_assert((std::is_same<_5::value_type, int>::value), "");
static_assert((std::is_same<_5::type, _5>::value), "");
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
static_assert((_5() == 5), "");
-#else
- assert(_5() == 5);
#endif
+ assert(_5() == 5);
+
#if TEST_STD_VER > 11
static_assert ( _5{}() == 5, "" );
diff --git a/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp b/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp
index 43f23f5ccc80..883548270469 100644
--- a/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp
+++ b/test/std/utilities/meta/meta.trans/meta.trans.other/aligned_union.pass.cpp
@@ -7,6 +7,8 @@
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: c++98, c++03
+
// type_traits
// aligned_union<size_t Len, class ...Types>
@@ -17,7 +19,6 @@
int main()
{
-#ifndef _LIBCPP_HAS_NO_VARIADICS
{
typedef std::aligned_union<10, char >::type T1;
#if TEST_STD_VER > 11
@@ -90,5 +91,4 @@ int main()
static_assert(std::alignment_of<T1>::value == 4, "");
static_assert(sizeof(T1) == 4, "");
}
-#endif
}
diff --git a/test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp b/test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp
index 29fb7a8431f1..dc69739271b5 100644
--- a/test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp
+++ b/test/std/utilities/optional/optional.comp_with_t/equal.pass.cpp
@@ -10,8 +10,8 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <optional>
-// template <class T> constexpr bool operator==(const optional<T>& x, const T& v);
-// template <class T> constexpr bool operator==(const T& v, const optional<T>& x);
+// template <class T, class U> constexpr bool operator==(const optional<T>& x, const U& v);
+// template <class T, class U> constexpr bool operator==(const U& v, const optional<T>& x);
#include <optional>
diff --git a/test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp b/test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp
index ae34eb20517e..e1bad12e3f69 100644
--- a/test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp
+++ b/test/std/utilities/optional/optional.comp_with_t/greater.pass.cpp
@@ -10,8 +10,8 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <optional>
-// template <class T> constexpr bool operator>(const optional<T>& x, const T& v);
-// template <class T> constexpr bool operator>(const T& v, const optional<T>& x);
+// template <class T, class U> constexpr bool operator>(const optional<T>& x, const U& v);
+// template <class T, class U> constexpr bool operator>(const U& v, const optional<T>& x);
#include <optional>
diff --git a/test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp b/test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp
index dac94002661f..342ddffc2c79 100644
--- a/test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp
+++ b/test/std/utilities/optional/optional.comp_with_t/greater_equal.pass.cpp
@@ -10,8 +10,8 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <optional>
-// template <class T> constexpr bool operator>=(const optional<T>& x, const T& v);
-// template <class T> constexpr bool operator>=(const T& v, const optional<T>& x);
+// template <class T, class U> constexpr bool operator>=(const optional<T>& x, const U& v);
+// template <class T, class U> constexpr bool operator>=(const U& v, const optional<T>& x);
#include <optional>
diff --git a/test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp b/test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp
index b71f8363b0a6..bcf6afcc6bfb 100644
--- a/test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp
+++ b/test/std/utilities/optional/optional.comp_with_t/less_equal.pass.cpp
@@ -10,8 +10,8 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <optional>
-// template <class T> constexpr bool operator<=(const optional<T>& x, const T& v);
-// template <class T> constexpr bool operator<=(const T& v, const optional<T>& x);
+// template <class T, class U> constexpr bool operator<=(const optional<T>& x, const U& v);
+// template <class T, class U> constexpr bool operator<=(const U& v, const optional<T>& x);
#include <optional>
diff --git a/test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp b/test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp
index 84456b3baa6e..3d5e2144a967 100644
--- a/test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp
+++ b/test/std/utilities/optional/optional.comp_with_t/less_than.pass.cpp
@@ -10,8 +10,8 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <optional>
-// template <class T> constexpr bool operator<(const optional<T>& x, const T& v);
-// template <class T> constexpr bool operator<(const T& v, const optional<T>& x);
+// template <class T, class U> constexpr bool operator<(const optional<T>& x, const U& v);
+// template <class T, class U> constexpr bool operator<(const U& v, const optional<T>& x);
#include <optional>
diff --git a/test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp b/test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp
index a4ffdc25e721..7da9b7ba7a03 100644
--- a/test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp
+++ b/test/std/utilities/optional/optional.comp_with_t/not_equal.pass.cpp
@@ -10,8 +10,8 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <optional>
-// template <class T> constexpr bool operator!=(const optional<T>& x, const T& v);
-// template <class T> constexpr bool operator!=(const T& v, const optional<T>& x);
+// template <class T, class U> constexpr bool operator!=(const optional<T>& x, const U& v);
+// template <class T, class U> constexpr bool operator!=(const U& v, const optional<T>& x);
#include <optional>
diff --git a/test/std/utilities/optional/optional.hash/hash.pass.cpp b/test/std/utilities/optional/optional.hash/hash.pass.cpp
index 8c91d6da761e..b4a1832cdc0a 100644
--- a/test/std/utilities/optional/optional.hash/hash.pass.cpp
+++ b/test/std/utilities/optional/optional.hash/hash.pass.cpp
@@ -26,7 +26,7 @@ namespace std {
template <>
struct hash<B> {
- size_t operator()(B const&) noexcept(false) { return 0; }
+ size_t operator()(B const&) TEST_NOEXCEPT_FALSE { return 0; }
};
}
@@ -37,10 +37,16 @@ int main()
const std::size_t nullopt_hash =
std::hash<optional<double>>{}(optional<double>{});
+
+ {
+ optional<B> opt;
+ ASSERT_NOT_NOEXCEPT(std::hash<optional<B>>()(opt));
+ ASSERT_NOT_NOEXCEPT(std::hash<optional<const B>>()(opt));
+ }
+
{
typedef int T;
optional<T> opt;
- ASSERT_NOT_NOEXCEPT(std::hash<optional<T>>()(opt));
assert(std::hash<optional<T>>{}(opt) == nullopt_hash);
opt = 2;
assert(std::hash<optional<T>>{}(opt) == std::hash<T>{}(*opt));
@@ -48,7 +54,6 @@ int main()
{
typedef std::string T;
optional<T> opt;
- ASSERT_NOT_NOEXCEPT(std::hash<optional<T>>()(opt));
assert(std::hash<optional<T>>{}(opt) == nullopt_hash);
opt = std::string("123");
assert(std::hash<optional<T>>{}(opt) == std::hash<T>{}(*opt));
@@ -56,7 +61,6 @@ int main()
{
typedef std::unique_ptr<int> T;
optional<T> opt;
- ASSERT_NOT_NOEXCEPT(std::hash<optional<T>>()(opt));
assert(std::hash<optional<T>>{}(opt) == nullopt_hash);
opt = std::unique_ptr<int>(new int(3));
assert(std::hash<optional<T>>{}(opt) == std::hash<T>{}(*opt));
diff --git a/test/std/utilities/optional/optional.relops/equal.pass.cpp b/test/std/utilities/optional/optional.relops/equal.pass.cpp
index 7667540f9760..0752841d3668 100644
--- a/test/std/utilities/optional/optional.relops/equal.pass.cpp
+++ b/test/std/utilities/optional/optional.relops/equal.pass.cpp
@@ -10,7 +10,7 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <optional>
-// template <class T> constexpr bool operator==(const optional<T>& x, const optional<T>& y);
+// template <class T, class U> constexpr bool operator==(const optional<T>& x, const optional<U>& y);
#include <optional>
#include <type_traits>
diff --git a/test/std/utilities/optional/optional.relops/greater_equal.pass.cpp b/test/std/utilities/optional/optional.relops/greater_equal.pass.cpp
index 0e05834c147a..f475f3796916 100644
--- a/test/std/utilities/optional/optional.relops/greater_equal.pass.cpp
+++ b/test/std/utilities/optional/optional.relops/greater_equal.pass.cpp
@@ -10,7 +10,7 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <optional>
-// template <class T> constexpr bool operator>= (const optional<T>& x, const optional<T>& y);
+// template <class T, class U> constexpr bool operator>= (const optional<T>& x, const optional<U>& y);
#include <optional>
diff --git a/test/std/utilities/optional/optional.relops/greater_than.pass.cpp b/test/std/utilities/optional/optional.relops/greater_than.pass.cpp
index 3946a6102ba9..c3f2af9323ab 100644
--- a/test/std/utilities/optional/optional.relops/greater_than.pass.cpp
+++ b/test/std/utilities/optional/optional.relops/greater_than.pass.cpp
@@ -10,7 +10,7 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <optional>
-// template <class T> constexpr bool operator> (const optional<T>& x, const optional<T>& y);
+// template <class T, class U> constexpr bool operator> (const optional<T>& x, const optional<U>& y);
#include <optional>
diff --git a/test/std/utilities/optional/optional.relops/less_equal.pass.cpp b/test/std/utilities/optional/optional.relops/less_equal.pass.cpp
index 5a1954154f44..35e80d3d4e50 100644
--- a/test/std/utilities/optional/optional.relops/less_equal.pass.cpp
+++ b/test/std/utilities/optional/optional.relops/less_equal.pass.cpp
@@ -10,7 +10,7 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <optional>
-// template <class T> constexpr bool operator<= (const optional<T>& x, const optional<T>& y);
+// template <class T, class U> constexpr bool operator<= (const optional<T>& x, const optional<U>& y);
#include <optional>
diff --git a/test/std/utilities/optional/optional.relops/less_than.pass.cpp b/test/std/utilities/optional/optional.relops/less_than.pass.cpp
index 35956e6f4a70..1dbffbd92352 100644
--- a/test/std/utilities/optional/optional.relops/less_than.pass.cpp
+++ b/test/std/utilities/optional/optional.relops/less_than.pass.cpp
@@ -10,7 +10,7 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <optional>
-// template <class T> constexpr bool operator< (const optional<T>& x, const optional<T>& y);
+// template <class T, class U> constexpr bool operator< (const optional<T>& x, const optional<U>& y);
#include <optional>
diff --git a/test/std/utilities/optional/optional.relops/not_equal.pass.cpp b/test/std/utilities/optional/optional.relops/not_equal.pass.cpp
index 1256537d6a86..12d9922a9592 100644
--- a/test/std/utilities/optional/optional.relops/not_equal.pass.cpp
+++ b/test/std/utilities/optional/optional.relops/not_equal.pass.cpp
@@ -10,7 +10,7 @@
// UNSUPPORTED: c++98, c++03, c++11, c++14
// <optional>
-// template <class T> constexpr bool operator!=(const optional<T>& x, const optional<T>& y);
+// template <class T, class U> constexpr bool operator!=(const optional<T>& x, const optional<U>& y);
#include <optional>
#include <type_traits>
diff --git a/test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move_convert.runtime.pass.cpp b/test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move_convert.runtime.pass.cpp
index 9b946a733fea..716a2b92a96c 100644
--- a/test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move_convert.runtime.pass.cpp
+++ b/test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.asgn/move_convert.runtime.pass.cpp
@@ -78,14 +78,11 @@ void test_sfinae() {
using DA = NCConvertingDeleter<A[]>; // non-copyable deleters
using DAC = NCConvertingDeleter<const A[]>; // non-copyable deleters
- using DB = NCConvertingDeleter<B[]>;
using UA = std::unique_ptr<A[]>;
using UAC = std::unique_ptr<const A[]>;
- using UB = std::unique_ptr<B[]>;
using UAD = std::unique_ptr<A[], DA>;
using UACD = std::unique_ptr<const A[], DAC>;
- using UBD = std::unique_ptr<B[], DB>;
{ // cannot move from an lvalue
static_assert(std::is_assignable<UAC, UA&&>::value, "");
static_assert(!std::is_assignable<UAC, UA&>::value, "");
diff --git a/test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.ctor/default.pass.cpp b/test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.ctor/default.pass.cpp
index 51d9aa708c40..2a7949f6420a 100644
--- a/test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.ctor/default.pass.cpp
+++ b/test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.ctor/default.pass.cpp
@@ -46,7 +46,7 @@ struct NonDefaultDeleter {
template <class ElemType>
void test_sfinae() {
#if TEST_STD_VER >= 11
- { // the constructor does not participate in overload resultion when
+ { // the constructor does not participate in overload resolution when
// the deleter is a pointer type
using U = std::unique_ptr<ElemType, void (*)(void*)>;
static_assert(!std::is_default_constructible<U>::value, "");
diff --git a/test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.ctor/move_convert.pass.cpp b/test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.ctor/move_convert.pass.cpp
index 6e5db86c97fc..769deea92c85 100644
--- a/test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.ctor/move_convert.pass.cpp
+++ b/test/std/utilities/smartptr/unique.ptr/unique.ptr.class/unique.ptr.ctor/move_convert.pass.cpp
@@ -19,6 +19,7 @@
#include <cassert>
#include "test_macros.h"
+#include "type_id.h"
#include "unique_ptr_test_helper.h"
template <int ID = 0>
@@ -33,9 +34,71 @@ struct GenericConvertingDeleter {
void operator()(void*) const {}
};
+template <class Templ, class Other>
+struct is_specialization;
+
+template <template <int> class Templ, int ID1, class Other>
+struct is_specialization<Templ<ID1>, Other> : std::false_type {};
+
+template <template <int> class Templ, int ID1, int ID2>
+struct is_specialization<Templ<ID1>, Templ<ID2> > : std::true_type {};
+
+template <class Templ, class Other>
+using EnableIfSpecialization = typename std::enable_if<
+ is_specialization<Templ, typename std::decay<Other>::type >::value
+ >::type;
+
+
+template <int ID>
+struct TrackingDeleter {
+ TrackingDeleter() : arg_type(&makeArgumentID<>()) {}
+
+ TrackingDeleter(TrackingDeleter const&)
+ : arg_type(&makeArgumentID<TrackingDeleter const&>()) {}
+
+ TrackingDeleter(TrackingDeleter&&)
+ : arg_type(&makeArgumentID<TrackingDeleter &&>()) {}
+
+ template <class T, class = EnableIfSpecialization<TrackingDeleter, T> >
+ TrackingDeleter(T&&) : arg_type(&makeArgumentID<T&&>()) {}
+
+ TrackingDeleter& operator=(TrackingDeleter const&) {
+ arg_type = &makeArgumentID<TrackingDeleter const&>();
+ return *this;
+ }
+
+ TrackingDeleter& operator=(TrackingDeleter &&) {
+ arg_type = &makeArgumentID<TrackingDeleter &&>();
+ return *this;
+ }
+
+ template <class T, class = EnableIfSpecialization<TrackingDeleter, T> >
+ TrackingDeleter& operator=(T&&) {
+ arg_type = &makeArgumentID<T&&>();
+ return *this;
+ }
+
+ void operator()(void*) const {}
+
+public:
+ TypeID const* reset() const {
+ TypeID const* tmp = arg_type;
+ arg_type = nullptr;
+ return tmp;
+ }
+
+ mutable TypeID const* arg_type;
+};
+
+
+template <class ExpectT, int ID>
+bool checkArg(TrackingDeleter<ID> const& d) {
+ return d.arg_type && *d.arg_type == makeArgumentID<ExpectT>();
+}
+
+
template <bool IsArray>
void test_sfinae() {
-#if TEST_STD_VER >= 11
typedef typename std::conditional<IsArray, A[], A>::type VT;
{ // Test that different non-reference deleter types are allowed so long
@@ -80,13 +143,11 @@ void test_sfinae() {
static_assert(std::is_constructible<U1, U5&&>::value, "");
static_assert(std::is_constructible<U1, U6&&>::value, "");
}
-#endif
}
template <bool IsArray>
void test_noexcept() {
-#if TEST_STD_VER >= 11
typedef typename std::conditional<IsArray, A[], A>::type VT;
{
typedef std::unique_ptr<const VT> APtr;
@@ -108,7 +169,39 @@ void test_noexcept() {
typedef std::unique_ptr<VT, const NCConstDeleter<const VT>&> BPtr;
static_assert(std::is_nothrow_constructible<APtr, BPtr>::value, "");
}
-#endif
+}
+
+
+template <bool IsArray>
+void test_deleter_value_category() {
+ typedef typename std::conditional<IsArray, A[], A>::type VT;
+ using TD1 = TrackingDeleter<1>;
+ using TD2 = TrackingDeleter<2>;
+ TD1 d1;
+ TD2 d2;
+
+ { // Test non-reference deleter conversions
+ using U1 = std::unique_ptr<VT, TD1 >;
+ using U2 = std::unique_ptr<VT, TD2 >;
+ U2 u2;
+ u2.get_deleter().reset();
+ U1 u1(std::move(u2));
+ assert(checkArg<TD2&&>(u1.get_deleter()));
+ }
+ { // Test assignment from non-const ref
+ using U1 = std::unique_ptr<VT, TD1 >;
+ using U2 = std::unique_ptr<VT, TD2& >;
+ U2 u2(nullptr, d2);
+ U1 u1(std::move(u2));
+ assert(checkArg<TD2&>(u1.get_deleter()));
+ }
+ { // Test assignment from const ref
+ using U1 = std::unique_ptr<VT, TD1 >;
+ using U2 = std::unique_ptr<VT, TD2 const& >;
+ U2 u2(nullptr, d2);
+ U1 u1(std::move(u2));
+ assert(checkArg<TD2 const&>(u1.get_deleter()));
+ }
}
@@ -116,9 +209,11 @@ int main() {
{
test_sfinae</*IsArray*/false>();
test_noexcept<false>();
+ test_deleter_value_category<false>();
}
{
test_sfinae</*IsArray*/true>();
test_noexcept<true>();
+ test_deleter_value_category<true>();
}
}
diff --git a/test/std/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp b/test/std/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp
index b85f039526a4..37753bcad0d1 100644
--- a/test/std/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.arithmetic/op_+.pass.cpp
@@ -16,7 +16,7 @@
#include <chrono>
#include <cassert>
-#include <test_macros.h>
+#include "test_macros.h"
int main()
{
diff --git a/test/std/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp b/test/std/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp
index 347cc1980e81..f932eb51c0d5 100644
--- a/test/std/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.arithmetic/op_-.pass.cpp
@@ -16,7 +16,7 @@
#include <chrono>
#include <cassert>
-#include <test_macros.h>
+#include "test_macros.h"
int main()
{
diff --git a/test/std/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp b/test/std/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp
index 1c87fcd909ef..9ecdfc750ab0 100644
--- a/test/std/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.cast/duration_cast.pass.cpp
@@ -20,6 +20,8 @@
#include <type_traits>
#include <cassert>
+#include "test_macros.h"
+
template <class ToDuration, class FromDuration>
void
test(const FromDuration& f, const ToDuration& d)
@@ -43,7 +45,7 @@ int main()
std::chrono::duration<double, std::ratio<3600> >(7265./3600));
test(std::chrono::duration<int, std::ratio<2, 3> >(9),
std::chrono::duration<int, std::ratio<3, 5> >(10));
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::hours h = std::chrono::duration_cast<std::chrono::hours>(std::chrono::milliseconds(7265000));
static_assert(h.count() == 2, "");
diff --git a/test/std/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp b/test/std/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp
index 2d0dd94d4cf6..5adc62ff1c5f 100644
--- a/test/std/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.comparisons/op_equal.pass.cpp
@@ -24,6 +24,8 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -68,7 +70,7 @@ int main()
assert(s1 == s2);
assert(!(s1 != s2));
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::seconds s1(3);
constexpr std::chrono::seconds s2(3);
diff --git a/test/std/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp b/test/std/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp
index 9d875579f326..42e798254208 100644
--- a/test/std/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.comparisons/op_less.pass.cpp
@@ -34,6 +34,8 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -92,7 +94,7 @@ int main()
assert( (s1 <= s2));
assert( (s1 >= s2));
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::seconds s1(3);
constexpr std::chrono::seconds s2(3);
diff --git a/test/std/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp b/test/std/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp
index 152227d82a82..c237fd7716f3 100644
--- a/test/std/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.cons/convert_exact.pass.cpp
@@ -19,6 +19,8 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -26,7 +28,7 @@ int main()
std::chrono::microseconds us = ms;
assert(us.count() == 1000);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::milliseconds ms(1);
constexpr std::chrono::microseconds us = ms;
diff --git a/test/std/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp b/test/std/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp
index 519b2b141c29..4b5042df2ce2 100644
--- a/test/std/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.cons/convert_inexact.pass.cpp
@@ -19,6 +19,8 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -26,7 +28,7 @@ int main()
std::chrono::duration<double, std::milli> ms = us;
assert(ms.count() == 1./1000);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::duration<double, std::micro> us(1);
constexpr std::chrono::duration<double, std::milli> ms = us;
diff --git a/test/std/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp b/test/std/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp
index 59fefe2e002d..8e5938b9e4b3 100644
--- a/test/std/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.cons/convert_int_to_float.pass.cpp
@@ -19,6 +19,8 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -26,7 +28,7 @@ int main()
std::chrono::duration<double, std::milli> d = i;
assert(d.count() == 3000);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::duration<int> i(3);
constexpr std::chrono::duration<double, std::milli> d = i;
diff --git a/test/std/utilities/time/time.duration/time.duration.cons/default.pass.cpp b/test/std/utilities/time/time.duration/time.duration.cons/default.pass.cpp
index c52990961c25..4f7d67bb630c 100644
--- a/test/std/utilities/time/time.duration/time.duration.cons/default.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.cons/default.pass.cpp
@@ -18,6 +18,7 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
#include "../../rep.h"
template <class D>
@@ -26,7 +27,7 @@ test()
{
D d;
assert(d.count() == typename D::rep());
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
constexpr D d2 = D();
static_assert(d2.count() == typename D::rep(), "");
#endif
diff --git a/test/std/utilities/time/time.duration/time.duration.cons/rep.pass.cpp b/test/std/utilities/time/time.duration/time.duration.cons/rep.pass.cpp
index 20f81619bd12..6ad743e714c2 100644
--- a/test/std/utilities/time/time.duration/time.duration.cons/rep.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.cons/rep.pass.cpp
@@ -17,6 +17,7 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
#include "../../rep.h"
template <class D, class R>
@@ -25,7 +26,7 @@ test(R r)
{
D d(r);
assert(d.count() == r);
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
constexpr D d2(R(2));
static_assert(d2.count() == 2, "");
#endif
diff --git a/test/std/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp b/test/std/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp
index b3ba9f7081e4..ae745a76f431 100644
--- a/test/std/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.cons/rep02.pass.cpp
@@ -19,11 +19,13 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
std::chrono::duration<double> d(5);
assert(d.count() == 5);
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
constexpr std::chrono::duration<double> d2(5);
static_assert(d2.count() == 5, "");
#endif
diff --git a/test/std/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp b/test/std/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp
index 6585351cb4c8..6859ffcb208a 100644
--- a/test/std/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.nonmember/op_+.pass.cpp
@@ -18,6 +18,8 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -44,7 +46,7 @@ int main()
std::chrono::duration<double, std::ratio<1, 15> > r = s1 + s2;
assert(r.count() == 75);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::seconds s1(3);
constexpr std::chrono::seconds s2(5);
diff --git a/test/std/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp b/test/std/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp
index fac58b9716d3..4bf26e4288b7 100644
--- a/test/std/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.nonmember/op_-.pass.cpp
@@ -19,6 +19,8 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -45,7 +47,7 @@ int main()
std::chrono::duration<double, std::ratio<1, 15> > r = s1 - s2;
assert(r.count() == -15);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::seconds s1(3);
constexpr std::chrono::seconds s2(5);
diff --git a/test/std/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp b/test/std/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp
index 6b24676f100c..561516b66511 100644
--- a/test/std/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.nonmember/op_divide_duration.pass.cpp
@@ -19,6 +19,8 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -41,7 +43,7 @@ int main()
std::chrono::duration<double, std::ratio<3, 5> > s2(5);
assert(s1 / s2 == 20./3);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::nanoseconds ns1(15);
constexpr std::chrono::nanoseconds ns2(5);
diff --git a/test/std/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp b/test/std/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp
index 3036cde5bf67..8b667e84d4d7 100644
--- a/test/std/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.nonmember/op_divide_rep.pass.cpp
@@ -19,6 +19,8 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -26,7 +28,7 @@ int main()
ns = ns / 5;
assert(ns.count() == 3);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::nanoseconds ns(15);
constexpr std::chrono::nanoseconds ns2 = ns / 5;
diff --git a/test/std/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp b/test/std/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp
index e69f3205d14f..441b053dc521 100644
--- a/test/std/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.nonmember/op_mod_duration.pass.cpp
@@ -19,6 +19,8 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -39,7 +41,7 @@ int main()
std::chrono::duration<int, std::ratio<1, 15> > r = s1 % s2;
assert(r.count() == 24);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::nanoseconds ns1(15);
constexpr std::chrono::nanoseconds ns2(6);
diff --git a/test/std/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.pass.cpp b/test/std/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.pass.cpp
index 1acbe34ea5eb..537fae373930 100644
--- a/test/std/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.nonmember/op_mod_rep.pass.cpp
@@ -19,6 +19,8 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -26,7 +28,7 @@ int main()
ns = ns % 6;
assert(ns.count() == 3);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::nanoseconds ns(15);
constexpr std::chrono::nanoseconds ns2 = ns % 6;
diff --git a/test/std/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp b/test/std/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp
index 190e74b1dc32..6b8c83732127 100644
--- a/test/std/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.nonmember/op_times_rep.pass.cpp
@@ -24,6 +24,8 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
+
int main()
{
{
@@ -33,7 +35,7 @@ int main()
ns = 6 * ns;
assert(ns.count() == 90);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
constexpr std::chrono::nanoseconds ns(3);
constexpr std::chrono::nanoseconds ns2 = ns * 5;
diff --git a/test/std/utilities/time/time.duration/time.duration.special/max.pass.cpp b/test/std/utilities/time/time.duration/time.duration.special/max.pass.cpp
index 405461e88ae9..48c3e86e8101 100644
--- a/test/std/utilities/time/time.duration/time.duration.special/max.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.special/max.pass.cpp
@@ -17,6 +17,7 @@
#include <limits>
#include <cassert>
+#include "test_macros.h"
#include "../../rep.h"
template <class D>
@@ -27,7 +28,7 @@ void test()
Rep max_rep = std::chrono::duration_values<Rep>::max();
assert(D::max().count() == max_rep);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
typedef typename D::rep Rep;
constexpr Rep max_rep = std::chrono::duration_values<Rep>::max();
diff --git a/test/std/utilities/time/time.duration/time.duration.special/min.pass.cpp b/test/std/utilities/time/time.duration/time.duration.special/min.pass.cpp
index 44cd64eff3d3..0d94aaa5869c 100644
--- a/test/std/utilities/time/time.duration/time.duration.special/min.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.special/min.pass.cpp
@@ -17,6 +17,7 @@
#include <limits>
#include <cassert>
+#include "test_macros.h"
#include "../../rep.h"
template <class D>
@@ -27,7 +28,7 @@ void test()
Rep min_rep = std::chrono::duration_values<Rep>::min();
assert(D::min().count() == min_rep);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
typedef typename D::rep Rep;
constexpr Rep min_rep = std::chrono::duration_values<Rep>::min();
diff --git a/test/std/utilities/time/time.duration/time.duration.special/zero.pass.cpp b/test/std/utilities/time/time.duration/time.duration.special/zero.pass.cpp
index 18350fe2ff47..7b312c5acb50 100644
--- a/test/std/utilities/time/time.duration/time.duration.special/zero.pass.cpp
+++ b/test/std/utilities/time/time.duration/time.duration.special/zero.pass.cpp
@@ -16,6 +16,7 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
#include "../../rep.h"
template <class D>
@@ -26,7 +27,7 @@ void test()
Rep zero_rep = std::chrono::duration_values<Rep>::zero();
assert(D::zero().count() == zero_rep);
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
{
typedef typename D::rep Rep;
constexpr Rep zero_rep = std::chrono::duration_values<Rep>::zero();
diff --git a/test/std/utilities/time/time.traits/time.traits.duration_values/max.pass.cpp b/test/std/utilities/time/time.traits/time.traits.duration_values/max.pass.cpp
index 89dc1dcc1a59..e3754c1f6475 100644
--- a/test/std/utilities/time/time.traits/time.traits.duration_values/max.pass.cpp
+++ b/test/std/utilities/time/time.traits/time.traits.duration_values/max.pass.cpp
@@ -15,6 +15,7 @@
#include <limits>
#include <cassert>
+#include "test_macros.h"
#include "../../rep.h"
int main()
@@ -25,7 +26,7 @@ int main()
std::numeric_limits<double>::max());
assert(std::chrono::duration_values<Rep>::max() ==
std::numeric_limits<Rep>::max());
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
static_assert(std::chrono::duration_values<int>::max() ==
std::numeric_limits<int>::max(), "");
static_assert(std::chrono::duration_values<double>::max() ==
diff --git a/test/std/utilities/time/time.traits/time.traits.duration_values/min.pass.cpp b/test/std/utilities/time/time.traits/time.traits.duration_values/min.pass.cpp
index 69812bba006a..508837375b87 100644
--- a/test/std/utilities/time/time.traits/time.traits.duration_values/min.pass.cpp
+++ b/test/std/utilities/time/time.traits/time.traits.duration_values/min.pass.cpp
@@ -15,6 +15,7 @@
#include <limits>
#include <cassert>
+#include "test_macros.h"
#include "../../rep.h"
int main()
@@ -25,7 +26,7 @@ int main()
std::numeric_limits<double>::lowest());
assert(std::chrono::duration_values<Rep>::min() ==
std::numeric_limits<Rep>::lowest());
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
static_assert(std::chrono::duration_values<int>::min() ==
std::numeric_limits<int>::lowest(), "");
static_assert(std::chrono::duration_values<double>::min() ==
diff --git a/test/std/utilities/time/time.traits/time.traits.duration_values/zero.pass.cpp b/test/std/utilities/time/time.traits/time.traits.duration_values/zero.pass.cpp
index 234b4bc31c9d..b84a676738a8 100644
--- a/test/std/utilities/time/time.traits/time.traits.duration_values/zero.pass.cpp
+++ b/test/std/utilities/time/time.traits/time.traits.duration_values/zero.pass.cpp
@@ -14,13 +14,14 @@
#include <chrono>
#include <cassert>
+#include "test_macros.h"
#include "../../rep.h"
int main()
{
assert(std::chrono::duration_values<int>::zero() == 0);
assert(std::chrono::duration_values<Rep>::zero() == 0);
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
+#if TEST_STD_VER >= 11
static_assert(std::chrono::duration_values<int>::zero() == 0, "");
static_assert(std::chrono::duration_values<Rep>::zero() == 0, "");
#endif
diff --git a/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.pass.cpp b/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.pass.cpp
index eeaa8a24ee68..fa2f116f7718 100644
--- a/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.pass.cpp
+++ b/test/std/utilities/tuple/tuple.tuple/tuple.cnstr/default.pass.cpp
@@ -86,7 +86,6 @@ int main()
static_assert(!noexcept(std::tuple<NoExceptDefault, ThrowingDefault>()), "");
static_assert(!noexcept(std::tuple<ThrowingDefault, ThrowingDefault>()), "");
}
-#ifndef _LIBCPP_HAS_NO_CONSTEXPR
{
constexpr std::tuple<> t;
}
@@ -106,5 +105,4 @@ int main()
IllFormedDefault v(0);
std::tuple<IllFormedDefault> t(v);
}
-#endif
}
diff --git a/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct.pass.cpp b/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct.pass.cpp
index 90476bcde28c..12968de2dd47 100644
--- a/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct.pass.cpp
+++ b/test/std/utilities/utility/pairs/pair.piecewise/piecewise_construct.pass.cpp
@@ -7,6 +7,8 @@
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: c++98, c++03
+
// <utility>
// template <class T1, class T2> struct pair
@@ -42,7 +44,6 @@ public:
int main()
{
-#ifndef _LIBCPP_HAS_NO_VARIADICS
std::pair<A, B> p(std::piecewise_construct,
std::make_tuple(4, 'a'),
std::make_tuple(3.5, 6u, 2u));
@@ -51,5 +52,4 @@ int main()
assert(p.second.get_d() == 3.5);
assert(p.second.get_u1() == 6u);
assert(p.second.get_u2() == 2u);
-#endif
}
diff --git a/test/std/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp b/test/std/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp
index 42a2666dd04b..c738adad7d79 100644
--- a/test/std/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp
+++ b/test/std/utilities/utility/pairs/pairs.pair/piecewise.pass.cpp
@@ -7,6 +7,8 @@
//
//===----------------------------------------------------------------------===//
+// UNSUPPORTED: c++98, c++03
+
// <utility>
// template <class T1, class T2> struct pair
@@ -21,7 +23,6 @@
int main()
{
-#ifndef _LIBCPP_HAS_NO_VARIADICS
{
typedef std::pair<int, int*> P1;
typedef std::pair<int*, int> P2;
@@ -31,5 +32,4 @@ int main()
assert(p3.first == P1(3, nullptr));
assert(p3.second == P2(nullptr, 4));
}
-#endif // _LIBCPP_HAS_NO_VARIADICS
}