Line data Source code
1 0 : // Distributed under the MIT License.
2 : // See LICENSE.txt for details.
3 :
4 : #pragma once
5 :
6 : #include <limits>
7 :
8 : /// @{
9 : /// \ingroup UtilitiesGroup
10 : /// \brief Returns an appropriate signaling NaN for fundamantal or multi-field
11 : /// types (such as `std::complex`).
12 : template <typename T>
13 1 : T make_signaling_NaN(const T& /*meta*/) {
14 : return std::numeric_limits<T>::signaling_NaN();
15 : }
16 :
17 : template <typename T>
18 1 : std::complex<T> make_signaling_NaN(const std::complex<T>& /*meta*/) {
19 : return {std::numeric_limits<T>::signaling_NaN(),
20 : std::numeric_limits<T>::signaling_NaN()};
21 : }
22 :
23 : template <typename T>
24 1 : T make_signaling_NaN() {
25 : return make_signaling_NaN(static_cast<T>(0));
26 : }
27 : /// @}
|