cmath: account for MSVCRT 12.0 changes

MSVCRT 12.0 introduces better compatibility for C99. This includes a number of
math routines that were previously undefined. Use the crtversion.h header to
detect the version of MSVCRT being targeted and avoid re-declaring the
variables.

Since copysign has been introduced in MSVCRT, importing the definition via using
makes it difficult to provide overloads (due to minor differences between
throw () and noexcept. Avoid defining the overloads on newer MSVCRT
targets.

llvm-svn: 230867
diff --git a/libcxx/include/support/win32/math_win32.h b/libcxx/include/support/win32/math_win32.h
index c62c54e..0d6b422 100644
--- a/libcxx/include/support/win32/math_win32.h
+++ b/libcxx/include/support/win32/math_win32.h
@@ -17,7 +17,9 @@
 
 #include <math.h>
 #include <float.h> // _FPCLASS_PN etc.
+#include <crtversion.h>
 
+#if ((_VC_CRT_MAJOR_VERSION-0) < 12)
 // Necessary?
 typedef float float_t;
 typedef double double_t;
@@ -109,7 +111,7 @@
 {
     return _fpclass(num);
 }
-
+#endif
 #endif // _LIBCPP_MSVCRT
 
 #endif // _LIBCPP_SUPPORT_WIN32_MATH_WIN32_H