// 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 _LIBCPP_BEGIN_NAMESPACE_STD // These are used in templates that won't ever be instantiated in kernel code. template constexpr bool isinf(T&& x) { static_assert(!is_same_v, "must not be instantiated in kernel code"); return false; } template constexpr bool isnan(T&& x) { static_assert(!is_same_v, "must not be instantiated in kernel code"); return false; } template constexpr bool signbit(T&& x) { static_assert(!is_same_v, "must not be instantiated in kernel code"); return false; } template constexpr T frexp(T&& x, int* exponent) { static_assert(!is_same_v, "must not be instantiated in kernel code"); return x; } template constexpr auto ceil(T&& x) { static_assert(!is_same_v, "must not be instantiated in kernel code"); return x; } _LIBCPP_END_NAMESPACE_STD #endif // ZIRCON_KERNEL_LIB_KTL_INCLUDE_CMATH_