corecrt_math.h Math Header Shipped with Windows* SDK 10.0.15063 is Not Compatible with Intel® C++ Compiler 18.0 and Earlier

Environment: Windows* SDK 10.0.15063

Affected products: Intel® C++ Compiler 18.0 and previous versions.

Problem Description :

This guard macro is defined inside Intel mathimf.h to make sure Microsoft's math header is not included as shown below:

#if defined(_WIN32) || defined(_WIN64)
# if defined(_INC_MATH)
#  error "<mathimf.h> is incompatible with system <math.h>!"
# else
#  define _INC_MATH /* Prevent possible inclusion of MS <math.h> below */
#  define __MATH_H_INCLUDED /* Prevent possible inclusion of Intel <math.h> below */
#  define __COMPLEX_H_INCLUDED /* Prevent possible inclusion of Intel <complex.h> below */
# endif
#endif

In versions of Windows SDK prior to 10.0.15063.0, the math header from Microsoft had the following guard macro:

#ifndef _INC_MATH
#define _INC_MATH

But with Windows SDK 10.0.15063.0 and above, the guard macro is taken away (please check corecrt_math.h shipped with Microsoft Compiler):

#pragma once
#define _INC_MATH

Test Program to reproduce the issue:

#include<mathimf.h>
#include<memory>

Compilation error message:

Intel(R) C++ Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 16.0.4.246 Build 20160811
Copyright (C) 1985-2016 Intel Corporation.  All rights reserved.

testissue.cpp
C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(24): error: invalid redeclaration of type name "____exception" (declared at line 1305 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
      struct _exception
             ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(89): warning #47: incompatible redefinition of macro "INFINITY" (declared at line 152 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
  #define INFINITY   ((float)(_HUGE_ENUF * _HUGE_ENUF))
          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(90): warning #47: incompatible redefinition of macro "HUGE_VAL" (declared at line 150 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
  #define HUGE_VAL   ((double)INFINITY)
          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(91): warning #47: incompatible redefinition of macro "HUGE_VALF" (declared at line 146 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
  #define HUGE_VALF  ((float)INFINITY)
          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(92): warning #47: incompatible redefinition of macro "HUGE_VALL" (declared at line 148 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
  #define HUGE_VALL  ((long double)INFINITY)
          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(93): warning #47: incompatible redefinition of macro "NAN" (declared at line 141 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
  #define NAN        ((float)(INFINITY * 0.0F))
          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(100): warning #47: incompatible redefinition of macro "FP_INFINITE" (declared at line 220 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
  #define FP_INFINITE  _INFCODE
          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(101): warning #47: incompatible redefinition of macro "FP_NAN" (declared at line 219 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
  #define FP_NAN       _NANCODE
          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(102): warning #47: incompatible redefinition of macro "FP_NORMAL" (declared at line 223 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
  #define FP_NORMAL    _FINITE
          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(103): warning #47: incompatible redefinition of macro "FP_SUBNORMAL" (declared at line 222 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
  #define FP_SUBNORMAL _DENORM
          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(104): warning #47: incompatible redefinition of macro "FP_ZERO" (declared at line 221 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
  #define FP_ZERO      0
          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(107): warning #47: incompatible redefinition of macro "FP_ILOGB0" (declared at line 131 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
  #define FP_ILOGB0   (-0x7fffffff - _C2)
          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(108): warning #47: incompatible redefinition of macro "FP_ILOGBNAN" (declared at line 132 of "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2016.4.246\windows\compiler\include\mathimf.h")
  #define FP_ILOGBNAN 0x7fffffff
          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(289): error: expected an identifier
      _Check_return_ inline int fpclassify(_In_ float _X) throw()
                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(289): error: expected a ")"
      _Check_return_ inline int fpclassify(_In_ float _X) throw()
                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(289): error: expected a ")"
      _Check_return_ inline int fpclassify(_In_ float _X) throw()
                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(289): error: expected a "{"
      _Check_return_ inline int fpclassify(_In_ float _X) throw()
                                                          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(294): error: expected an identifier
      _Check_return_ inline int fpclassify(_In_ double _X) throw()
                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(294): error: expected a ")"
      _Check_return_ inline int fpclassify(_In_ double _X) throw()
                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(294): error: expected a ")"
      _Check_return_ inline int fpclassify(_In_ double _X) throw()
                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(294): error: expected a "{"
      _Check_return_ inline int fpclassify(_In_ double _X) throw()
                                                           ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(299): error: expected an identifier
      _Check_return_ inline int fpclassify(_In_ long double _X) throw()
                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(299): error: expected a ")"
      _Check_return_ inline int fpclassify(_In_ long double _X) throw()
                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(299): error: expected a ")"
      _Check_return_ inline int fpclassify(_In_ long double _X) throw()
                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(299): error: expected a "{"
      _Check_return_ inline int fpclassify(_In_ long double _X) throw()
                                                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(304): error: expected an identifier
      _Check_return_ inline bool signbit(_In_ float _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(304): error: expected a ")"
      _Check_return_ inline bool signbit(_In_ float _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(304): error: expected a ")"
      _Check_return_ inline bool signbit(_In_ float _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(304): error: expected a "{"
      _Check_return_ inline bool signbit(_In_ float _X) throw()
                                                        ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(309): error: expected an identifier
      _Check_return_ inline bool signbit(_In_ double _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(309): error: expected a ")"
      _Check_return_ inline bool signbit(_In_ double _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(309): error: expected a ")"
      _Check_return_ inline bool signbit(_In_ double _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(309): error: expected a "{"
      _Check_return_ inline bool signbit(_In_ double _X) throw()
                                                         ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(314): error: expected an identifier
      _Check_return_ inline bool signbit(_In_ long double _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(314): error: expected a ")"
      _Check_return_ inline bool signbit(_In_ long double _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(314): error: expected a ")"
      _Check_return_ inline bool signbit(_In_ long double _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(314): error: expected a "{"
      _Check_return_ inline bool signbit(_In_ long double _X) throw()
                                                              ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(400): error: expected an identifier
      _Check_return_ inline bool isfinite(_In_ _Ty _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(400): error: expected a ")"
      _Check_return_ inline bool isfinite(_In_ _Ty _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(406): error: expected an identifier
      _Check_return_ inline bool isinf(_In_ _Ty _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(406): error: expected a ")"
      _Check_return_ inline bool isinf(_In_ _Ty _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(412): error: expected an identifier
      _Check_return_ inline bool isnan(_In_ _Ty _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(412): error: expected a ")"
      _Check_return_ inline bool isnan(_In_ _Ty _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(418): error: expected an identifier
      _Check_return_ inline bool isnormal(_In_ _Ty _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(418): error: expected a ")"
      _Check_return_ inline bool isnormal(_In_ _Ty _X) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(424): error: expected an identifier
      _Check_return_ inline bool isgreater(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(424): error: expected a ")"
      _Check_return_ inline bool isgreater(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(430): error: expected an identifier
      _Check_return_ inline bool isgreaterequal(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(430): error: expected a ")"
      _Check_return_ inline bool isgreaterequal(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(436): error: expected an identifier
      _Check_return_ inline bool isless(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(436): error: expected a ")"
      _Check_return_ inline bool isless(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(442): error: expected an identifier
      _Check_return_ inline bool islessequal(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(442): error: expected a ")"
      _Check_return_ inline bool islessequal(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(448): error: expected an identifier
      _Check_return_ inline bool islessgreater(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(448): error: expected a ")"
      _Check_return_ inline bool islessgreater(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(454): error: expected an identifier
      _Check_return_ inline bool isunordered(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(454): error: expected a ")"
      _Check_return_ inline bool isunordered(_In_ _Ty1 _X, _In_ _Ty2 _Y) throw()
                                 ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(572): error: more than one instance of overloaded function "__libm_nexttoward64f" has "C" linkage
      _Check_return_ _ACRTIMP float     __cdecl nexttowardf(_In_ float _X, _In_ long double _Y);
                                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(774): error: more than one instance of overloaded function "acosh" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl acoshl(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(776): error: more than one instance of overloaded function "acos" has "C" linkage
      _Check_return_ __inline long double __CRTDECL acosl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(781): error: more than one instance of overloaded function "asinh" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl asinhl(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(783): error: more than one instance of overloaded function "asin" has "C" linkage
      _Check_return_ __inline long double __CRTDECL asinl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(788): error: more than one instance of overloaded function "atan2" has "C" linkage
      _Check_return_ __inline long double __CRTDECL atan2l(_In_ long double _Y, _In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(793): error: more than one instance of overloaded function "atanh" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl atanhl(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(795): error: more than one instance of overloaded function "atan" has "C" linkage
      _Check_return_ __inline long double __CRTDECL atanl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(800): error: more than one instance of overloaded function "cbrt" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl cbrtl(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(802): error: more than one instance of overloaded function "ceil" has "C" linkage
      _Check_return_ __inline long double __CRTDECL ceill(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(812): error: more than one instance of overloaded function "copysign" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl copysignl(_In_ long double _Number, _In_ long double _Sign);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(819): error: more than one instance of overloaded function "cosh" has "C" linkage
      _Check_return_ __inline long double __CRTDECL coshl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(824): error: more than one instance of overloaded function "cos" has "C" linkage
      _Check_return_ __inline long double __CRTDECL cosl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(829): error: more than one instance of overloaded function "erf" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl erfl(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(830): error: more than one instance of overloaded function "erfc" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl erfcl(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(832): error: more than one instance of overloaded function "exp" has "C" linkage
      _Check_return_ __inline long double __CRTDECL expl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(837): error: more than one instance of overloaded function "exp2" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl exp2l(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(838): error: more than one instance of overloaded function "expm1" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl expm1l(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(845): error: more than one instance of overloaded function "fdim" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl fdiml(_In_ long double _X, _In_ long double _Y);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(847): error: more than one instance of overloaded function "floor" has "C" linkage
      _Check_return_ __inline long double __CRTDECL floorl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(852): error: more than one instance of overloaded function "fma" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl fmal(_In_ long double _X, _In_ long double _Y, _In_ long double _Z);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(853): error: more than one instance of overloaded function "fmax" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl fmaxl(_In_ long double _X, _In_ long double _Y);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(854): error: more than one instance of overloaded function "fmin" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl fminl(_In_ long double _X, _In_ long double _Y);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(856): error: more than one instance of overloaded function "fmod" has "C" linkage
      _Check_return_ __inline long double __CRTDECL fmodl(_In_ long double _X, _In_ long double _Y)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(861): error: more than one instance of overloaded function "frexp" has "C" linkage
      _Check_return_ __inline long double __CRTDECL frexpl(_In_ long double _X, _Out_ int *_Y)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(866): error: more than one instance of overloaded function "ilogb" has "C" linkage
      _Check_return_ _ACRTIMP int __cdecl ilogbl(_In_ long double _X);
                                          ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(873): error: more than one instance of overloaded function "hypot" has "C" linkage
      _Check_return_ __inline long double __CRTDECL hypotl(_In_ long double _X, _In_ long double _Y)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(878): error: more than one instance of overloaded function "ldexp" has "C" linkage
      _Check_return_ __inline long double __CRTDECL ldexpl(_In_ long double _X, _In_ int _Y)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(883): error: more than one instance of overloaded function "lgamma" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl lgammal(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(884): error: more than one instance of overloaded function "llrint" has "C" linkage
      _Check_return_ _ACRTIMP long long __cdecl llrintl(_In_ long double _X);
                                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(885): error: more than one instance of overloaded function "llround" has "C" linkage
      _Check_return_ _ACRTIMP long long __cdecl llroundl(_In_ long double _X);
                                                ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(887): error: more than one instance of overloaded function "log" has "C" linkage
      _Check_return_ __inline long double __CRTDECL logl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(892): error: more than one instance of overloaded function "log10" has "C" linkage
      _Check_return_ __inline long double __CRTDECL log10l(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(897): error: more than one instance of overloaded function "log1p" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl log1pl(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(898): error: more than one instance of overloaded function "log2" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl log2l(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(899): error: more than one instance of overloaded function "logb" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl logbl(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(900): error: more than one instance of overloaded function "lrint" has "C" linkage
      _Check_return_ _ACRTIMP long __cdecl lrintl(_In_ long double _X);
                                           ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(901): error: more than one instance of overloaded function "lround" has "C" linkage
      _Check_return_ _ACRTIMP long __cdecl lroundl(_In_ long double _X);
                                           ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(903): error: more than one instance of overloaded function "modf" has "C" linkage
      _Check_return_ __inline long double __CRTDECL modfl(_In_ long double _X, _Out_ long double* _Y)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(912): error: more than one instance of overloaded function "nearbyint" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl nearbyintl(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(913): error: more than one instance of overloaded function "nextafter" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl nextafterl(_In_ long double _X, _In_ long double _Y);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(914): error: more than one instance of overloaded function "__libm_nexttoward64l" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl nexttowardl(_In_ long double _X, _In_ long double _Y);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(916): error: more than one instance of overloaded function "pow" has "C" linkage
      _Check_return_ __inline long double __CRTDECL powl(_In_ long double _X, _In_ long double _Y)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(921): error: more than one instance of overloaded function "remainder" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl remainderl(_In_ long double _X, _In_ long double _Y);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(922): error: more than one instance of overloaded function "remquo" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl remquol(_In_ long double _X, _In_ long double _Y, _Out_ int* _Z);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(923): error: more than one instance of overloaded function "rint" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl rintl(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(924): error: more than one instance of overloaded function "round" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl roundl(_In_ long double _X);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(925): error: more than one instance of overloaded function "scalbln" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl scalblnl(_In_ long double _X, _In_ long _Y);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(926): error: more than one instance of overloaded function "scalbn" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl scalbnl(_In_ long double _X, _In_ int _Y);
                                                  ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(928): error: more than one instance of overloaded function "sinh" has "C" linkage
      _Check_return_ __inline long double __CRTDECL sinhl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(933): error: more than one instance of overloaded function "sin" has "C" linkage
      _Check_return_ __inline long double __CRTDECL sinl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(938): error: more than one instance of overloaded function "sqrt" has "C" linkage
      _Check_return_ __inline long double __CRTDECL sqrtl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(943): error: more than one instance of overloaded function "tanh" has "C" linkage
      _Check_return_ __inline long double __CRTDECL tanhl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(948): error: more than one instance of overloaded function "tan" has "C" linkage
      _Check_return_ __inline long double __CRTDECL tanl(_In_ long double _X)
                                                    ^

C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\ucrt\corecrt_math.h(953): error: more than one instance of overloaded function "tgamma" has "C" linkage
      _Check_return_ _ACRTIMP long double __cdecl tgammal(_In_ long double _X);
                                                  ^

compilation aborted for testissue.cpp (code 4)

Resolution:

This issue is resolved in Intel(R) C++ Compiler 18.0 Update 1.

有关编译器优化的更完整信息,请参阅优化通知