Why is the program failing to compile?
在Issue 79017: Old PowerMac G5, MacPorts GCC 5.4, C++11 and "std::log2 has not been declared"海灣合作委員會的報告得到了來自GCC開發者一些很好的意見。
根據Jonathan Wakely and the results of the program below:
test.cxx:53:21: error: 'llrint' was not declared in this scope
llrint(0.0);
test.cxx:54:23: error: 'llrintf' was not declared in this scope
llrintf(0.0f);
test.cxx:55:23: error: 'llrintl' was not declared in this scope
llrintl(0.0l);
test.cxx:56:22: error: 'llround' was not declared in this scope
llround(0.0);
test.cxx:57:24: error: 'llroundf' was not declared in this scope
llroundf(0.0f);
test.cxx:58:24: error: 'llroundl' was not declared in this scope
llroundl(0.0l);
Because these six functions are missing we treat all C99 math functions as missing. We could split the checks into two pieces, so we check for these separately, which would allow the rest of the C99 math library to be imported into namespace std.
#include <math.h>
int main() {
typedef double_t my_double_t;
typedef float_t my_float_t;
acosh(0.0);
acoshf(0.0f);
acoshl(0.0l);
asinh(0.0);
asinhf(0.0f);
asinhl(0.0l);
atanh(0.0);
atanhf(0.0f);
atanhl(0.0l);
cbrt(0.0);
cbrtf(0.0f);
cbrtl(0.0l);
copysign(0.0, 0.0);
copysignf(0.0f, 0.0f);
copysignl(0.0l, 0.0l);
erf(0.0);
erff(0.0f);
erfl(0.0l);
erfc(0.0);
erfcf(0.0f);
erfcl(0.0l);
exp2(0.0);
exp2f(0.0f);
exp2l(0.0l);
expm1(0.0);
expm1f(0.0f);
expm1l(0.0l);
fdim(0.0, 0.0);
fdimf(0.0f, 0.0f);
fdiml(0.0l, 0.0l);
fma(0.0, 0.0, 0.0);
fmaf(0.0f, 0.0f, 0.0f);
fmal(0.0l, 0.0l, 0.0l);
fmax(0.0, 0.0);
fmaxf(0.0f, 0.0f);
fmaxl(0.0l, 0.0l);
fmin(0.0, 0.0);
fminf(0.0f, 0.0f);
fminl(0.0l, 0.0l);
hypot(0.0, 0.0);
hypotf(0.0f, 0.0f);
hypotl(0.0l, 0.0l);
ilogb(0.0);
ilogbf(0.0f);
ilogbl(0.0l);
lgamma(0.0);
lgammaf(0.0f);
lgammal(0.0l);
llrint(0.0);
llrintf(0.0f);
llrintl(0.0l);
llround(0.0);
llroundf(0.0f);
llroundl(0.0l);
log1p(0.0);
log1pf(0.0f);
log1pl(0.0l);
log2(0.0);
log2f(0.0f);
log2l(0.0l);
logb(0.0);
logbf(0.0f);
logbl(0.0l);
lrint(0.0);
lrintf(0.0f);
lrintl(0.0l);
lround(0.0);
lroundf(0.0f);
lroundl(0.0l);
nan(0);
nanf(0);
nanl(0);
nearbyint(0.0);
nearbyintf(0.0f);
nearbyintl(0.0l);
nextafter(0.0, 0.0);
nextafterf(0.0f, 0.0f);
nextafterl(0.0l, 0.0l);
nexttoward(0.0, 0.0);
nexttowardf(0.0f, 0.0f);
nexttowardl(0.0l, 0.0l);
remainder(0.0, 0.0);
remainderf(0.0f, 0.0f);
remainderl(0.0l, 0.0l);
remquo(0.0, 0.0, 0);
remquof(0.0f, 0.0f, 0);
remquol(0.0l, 0.0l, 0);
rint(0.0);
rintf(0.0f);
rintl(0.0l);
round(0.0);
roundf(0.0f);
roundl(0.0l);
scalbln(0.0, 0l);
scalblnf(0.0f, 0l);
scalblnl(0.0l, 0l);
scalbn(0.0, 0);
scalbnf(0.0f, 0);
scalbnl(0.0l, 0);
tgamma(0.0);
tgammaf(0.0f);
tgammal(0.0l);
trunc(0.0);
truncf(0.0f);
truncl(0.0l);
return 0;
}
鑑於你是在Mac上,請確保您使用的不是4.2頭。 –
@BaummitAugen - 從*/opt/local/include/gcc5/C++/cmath * * * ...表明它使用期望的頭文件嗎? – jww
只是FYI,我嘗試在OSX 10.11.4(英特爾i7)與g ++ - 6(通過Homebrew安裝)和鏗鏘++,它編譯和運行良好。 – fedepad