| // Copyright 2021 The Fuchsia Authors | |
| // | |
| // Use of this source code is governed by a MIT-style | |
| // license that can be found in the LICENSE file or at | |
| // https://opensource.org/licenses/MIT | |
| #ifndef ZIRCON_KERNEL_LIB_KTL_INCLUDE_CMATH_ | |
| #define ZIRCON_KERNEL_LIB_KTL_INCLUDE_CMATH_ | |
| // The kernel doesn't want this file but some libc++ headers we need | |
| // wind up including it. They don't actually most of the math | |
| // declarations except under #if conditions that aren't true. | |
| #include <__config> | |
| #include <type_traits> | |
| _LIBCPP_BEGIN_NAMESPACE_STD | |
| // These are used in templates that won't ever be instantiated in kernel code. | |
| template <typename T> | |
| constexpr bool isinf(T&& x) { | |
| static_assert(!is_same_v<T, T>, "must not be instantiated in kernel code"); | |
| return false; | |
| } | |
| template <typename T> | |
| constexpr bool isnan(T&& x) { | |
| static_assert(!is_same_v<T, T>, "must not be instantiated in kernel code"); | |
| return false; | |
| } | |
| template <typename T> | |
| constexpr bool signbit(T&& x) { | |
| static_assert(!is_same_v<T, T>, "must not be instantiated in kernel code"); | |
| return false; | |
| } | |
| template <typename T> | |
| constexpr T frexp(T&& x, int* exponent) { | |
| static_assert(!is_same_v<T, T>, "must not be instantiated in kernel code"); | |
| return x; | |
| } | |
| template <typename T> | |
| constexpr auto ceil(T&& x) { | |
| static_assert(!is_same_v<T, T>, "must not be instantiated in kernel code"); | |
| return x; | |
| } | |
| _LIBCPP_END_NAMESPACE_STD | |
| #endif // ZIRCON_KERNEL_LIB_KTL_INCLUDE_CMATH_ |