summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/depr/depr.c.headers/math_h.pass.cpp
diff options
context:
space:
mode:
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.cpp42
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()
OpenPOWER on IntegriCloud