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 : /// @}