Я пытался придумать хак, чтобы проверить, определяется ли std :: isnan
без специальных компиляторов корпуса в препроцессоре, и придумал следующее, что я ожидая нормально работать.
#include
#include
namespace detail {
using namespace std;
struct dummy {};
void isnan(dummy);
//bool isnan(float); // Just adding this declaration makes it work!
template
struct is_isnan_available {
template
static decltype(isnan(T1())) test(int);
template
static void test(...);
enum { value = !std::is_void(0))>::value };
};
}
int main() {
return detail::is_isnan_available::value;
}
Оказывается он не обнаруживает . Я точно знаю, что std :: isnan
определен на ideone, потому что я тестировал это вручную.
И когда я раскомментирую отмеченную строку выше , это работает.
Что мне здесь не хватает? Чем объясняется такое поведение?