diff options
author | Akira Hatanaka <ahatanaka@apple.com> | 2018-05-23 17:31:09 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@apple.com> | 2018-05-23 17:31:09 +0000 |
commit | ad3be5c454e150918c6255d2865623cb4ffdbcac (patch) | |
tree | 3dbd742eebf50d19cc3f7d0dd78545f16d3ee747 /libcxx | |
parent | ef33edd9b5e321a7248f30b7c9d1794039013b8b (diff) | |
download | bcm5719-llvm-ad3be5c454e150918c6255d2865623cb4ffdbcac.tar.gz bcm5719-llvm-ad3be5c454e150918c6255d2865623cb4ffdbcac.zip |
Teach __libcpp_is_floating_point that __fp16 and _Float16 are
floating-point types.
rdar://problem/40377353
llvm-svn: 333103
Diffstat (limited to 'libcxx')
-rw-r--r-- | libcxx/include/type_traits | 4 | ||||
-rw-r--r-- | libcxx/test/libcxx/type_traits/is_floating_point.pass.cpp | 22 |
2 files changed, 26 insertions, 0 deletions
diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits index ec7739144ac..fe99d895bed 100644 --- a/libcxx/include/type_traits +++ b/libcxx/include/type_traits @@ -733,6 +733,10 @@ _LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_integral_v // is_floating_point template <class _Tp> struct __libcpp_is_floating_point : public false_type {}; +template <> struct __libcpp_is_floating_point<__fp16> : public true_type {}; +#ifdef __FLT16_MANT_DIG__ +template <> struct __libcpp_is_floating_point<_Float16> : public true_type {}; +#endif template <> struct __libcpp_is_floating_point<float> : public true_type {}; template <> struct __libcpp_is_floating_point<double> : public true_type {}; template <> struct __libcpp_is_floating_point<long double> : public true_type {}; diff --git a/libcxx/test/libcxx/type_traits/is_floating_point.pass.cpp b/libcxx/test/libcxx/type_traits/is_floating_point.pass.cpp new file mode 100644 index 00000000000..f164ac91890 --- /dev/null +++ b/libcxx/test/libcxx/type_traits/is_floating_point.pass.cpp @@ -0,0 +1,22 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// <type_traits> +// +// Test that is_floating_point<T>::value is true when T=__fp16 or T=_Float16. + +#include <type_traits> + +int main() { + static_assert(std::is_floating_point<__fp16>::value, ""); +#ifdef __FLT16_MANT_DIG__ + static_assert(std::is_floating_point<_Float16>::value, ""); +#endif + return 0; +} |