To avoid any further speculation, and downright bad suggestions such as using #if 0
, let me give an authoritative answer, from the perspective of a MinGW project contributor.
Yes, the MinGW.org implementation of include/math.h
does have a bug in its inline implementation of hypotf (float, float)
; the bug is triggered when compiling C++, with the affected header included (as it is when cmath
is included), and any compiler option which causes __STRICT_ANSI__
to become defined is specified, (as is the case for those -std=c...
options noted by the OP). The appropriate solution is not to occlude part of the math.h
file, with #if 0
or otherwise, but to correct the broken inline implementation of hypotf (float, float)
; simply removing the spurious leading underscore from the inline reference to _hypot (float, float)
, where its return value is cast to the float return type should suffice.
Alternatively, substituting an equivalent -std=gnu...
for -std=c...
in the compiler options should circumvent the bug, and may offer a suitable workaround.
FWIW, I'm not entirely happy with MinGW.org's current implementation of hypotl (long double, long double)
either; correcting both issues is on my punch list for the next release of the MinGW runtime, but ATM, I have little time to devote to preparing this.
Update
This bug is no longer present in the current release of the MinGW.org runtime library (currently mingwrt-3.22.4, but fixed since release 3.22). If you are using anything older than this, (including any of the critically broken 4.x releases), you should upgrade.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…