diff --git a/Numeric/MetricBasis.cpp b/Numeric/MetricBasis.cpp
index a5a9a5c7a8b8225d1a29fd2219c1c9de74a74f3c..d07f1639bf83b9cd93a6cf0eafe6d670df6cf0a6 100644
--- a/Numeric/MetricBasis.cpp
+++ b/Numeric/MetricBasis.cpp
@@ -1133,7 +1133,7 @@ double MetricBasis::_subdivideForRmin(
 
   md = subdomains.top();
   double ans = md->_RminBez;
-  if (std::isnan(ans)) Msg::Error("ISNAN %d", subdomains.size());
+  if (_chknumber(ans)) Msg::Error("ISNAN %d", subdomains.size());
 
   while (subdomains.size()) {
     md = subdomains.top();
diff --git a/Numeric/MetricBasis.h b/Numeric/MetricBasis.h
index 87ad416abae73f1e8af3c211b09f4827dd9b6987..4b2bb9d861bd9c3dcb7c80da5b1a251e33a27907 100644
--- a/Numeric/MetricBasis.h
+++ b/Numeric/MetricBasis.h
@@ -113,7 +113,13 @@ private:
     const double phi = std::acos(x) / 3;
     return (a + 2*std::cos(phi + 2*M_PI/3)) / (a + 2*std::cos(phi));
   }
-  bool _chknumber(double val) const {return std::isnan(val) || std::isinf(val);}
+  bool _chknumber(double val) const {
+#if defined(_MSC_VER)
+    return _isnan(val) || _isinf(val);
+#else
+    return std::isnan(val) || std::isinf(val);
+#endif
+  }
   bool _chka(double a) const {return _chknumber(a) || a < 1;}
   bool _chkK(double K) const {return _chknumber(K) || K < 0;}
   int _chkaK(double a, double K) const {