diff options
Diffstat (limited to 'test/std/utilities')
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  } | 
