diff options
Diffstat (limited to 'libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp')
-rw-r--r-- | libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp b/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp index b0b6c0cb324..2077a072333 100644 --- a/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp +++ b/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp @@ -97,13 +97,45 @@ Ambiguous scalbn(Ambiguous, Ambiguous){ return Ambiguous(); } Ambiguous tgamma(Ambiguous){ return Ambiguous(); } Ambiguous trunc(Ambiguous){ return Ambiguous(); } +template <class T, class = decltype(::abs(std::declval<T>()))> +std::true_type has_abs_imp(int); +template <class T> +std::false_type has_abs_imp(...); + +template <class T> +struct has_abs : decltype(has_abs_imp<T>(0)) {}; + void test_abs() { - static_assert((std::is_same<decltype(abs((float)0)), float>::value), ""); - static_assert((std::is_same<decltype(abs((double)0)), double>::value), ""); - static_assert((std::is_same<decltype(abs((long double)0)), long double>::value), ""); - static_assert((std::is_same<decltype(abs(Ambiguous())), Ambiguous>::value), ""); - assert(abs(-1.) == 1); +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wabsolute-value" +#endif + static_assert((std::is_same<decltype(abs((float)0)), float>::value), ""); + static_assert((std::is_same<decltype(abs((double)0)), double>::value), ""); + static_assert( + (std::is_same<decltype(abs((long double)0)), long double>::value), ""); + static_assert((std::is_same<decltype(abs((int)0)), int>::value), ""); + static_assert((std::is_same<decltype(abs((long)0)), long>::value), ""); + static_assert((std::is_same<decltype(abs((long long)0)), long long>::value), + ""); + static_assert((std::is_same<decltype(abs((unsigned char)0)), int>::value), + ""); + static_assert((std::is_same<decltype(abs((unsigned short)0)), int>::value), + ""); + + static_assert((std::is_same<decltype(abs(Ambiguous())), Ambiguous>::value), + ""); + + static_assert(!has_abs<unsigned>::value, ""); + static_assert(!has_abs<unsigned long>::value, ""); + static_assert(!has_abs<unsigned long long>::value, ""); + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + + assert(abs(-1.) == 1); } void test_acos() |