Author: ahatanak Date: Wed May 23 10:31:09 2018 New Revision: 333103 URL: http://llvm.org/viewvc/llvm-project?rev=333103&view=rev Log: Teach __libcpp_is_floating_point that __fp16 and _Float16 are floating-point types.
rdar://problem/40377353 Added: libcxx/trunk/test/libcxx/type_traits/is_floating_point.pass.cpp Modified: libcxx/trunk/include/type_traits Modified: libcxx/trunk/include/type_traits URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/type_traits?rev=333103&r1=333102&r2=333103&view=diff ============================================================================== --- libcxx/trunk/include/type_traits (original) +++ libcxx/trunk/include/type_traits Wed May 23 10:31:09 2018 @@ -733,6 +733,10 @@ _LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR boo // 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 {}; Added: libcxx/trunk/test/libcxx/type_traits/is_floating_point.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/type_traits/is_floating_point.pass.cpp?rev=333103&view=auto ============================================================================== --- libcxx/trunk/test/libcxx/type_traits/is_floating_point.pass.cpp (added) +++ libcxx/trunk/test/libcxx/type_traits/is_floating_point.pass.cpp Wed May 23 10:31:09 2018 @@ -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; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits