blob: 5add0b6aaaf808112086b484605836f13a6d07e7 [file] [log] [blame] [edit]
// 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;
}
_LIBCPP_END_NAMESPACE_STD
#endif // ZIRCON_KERNEL_LIB_KTL_INCLUDE_CMATH_