isnan() is from C99; and is not part of C++98. See http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.15
In C++0x, isnan() is part of TR1.
You could easily roll out isnan() and isinf() on your own, though:
#include <limits>
template< typename T > inline bool isnan( T value )
{ return value != value ; }
template< typename T > inline bool isinf( T value )
{
return std::numeric_limits<T>::has_infinity &&
value == std::numeric_limits<T>::infinity() ;
}