forked from boostorg/config
Don't take the address of extern "C" functions: some compilers (PGI for example) don't allow mixing pointers to extern "C" and pointers to extern "C++". Actually call the functions instead and make sure they all work as advertised.
[SVN r70202]
This commit is contained in:
@@ -35,19 +35,23 @@ int test()
|
|||||||
#error platform does not define FE_ALL_EXCEPT
|
#error platform does not define FE_ALL_EXCEPT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int (*has_feclearexcept)(int ) = ::feclearexcept;
|
int i;
|
||||||
int (*has_fegetexceptflag)(fexcept_t *, int ) = fegetexceptflag;
|
fexcept_t fe;
|
||||||
int (*has_feraiseexcept)(int ) = feraiseexcept;
|
fenv_t env;
|
||||||
int (*has_fesetexceptflag)(const fexcept_t *, int ) = fesetexceptflag;
|
|
||||||
int (*has_fetestexcept)(int ) = fetestexcept;
|
|
||||||
int (*has_fegetround)(void) = fegetround;
|
|
||||||
int (*has_fesetround)(int ) = fesetround;
|
|
||||||
int (*has_fegetenv)(fenv_t *) = fegetenv;
|
|
||||||
int (*has_feholdexcept)(fenv_t *) = feholdexcept;
|
|
||||||
int (*has_fesetenv)(const fenv_t *) = fesetenv;
|
|
||||||
int (*has_feupdateenv)(const fenv_t *) = feupdateenv;
|
|
||||||
|
|
||||||
return 0;
|
i = feclearexcept(FE_ALL_EXCEPT);
|
||||||
|
i += fetestexcept(FE_ALL_EXCEPT); // All flags should be zero
|
||||||
|
i += fegetexceptflag(&fe, FE_ALL_EXCEPT);
|
||||||
|
i += fesetexceptflag(&fe, FE_ALL_EXCEPT);
|
||||||
|
i += feraiseexcept(0);
|
||||||
|
i += fesetround(fegetround());
|
||||||
|
i += fegetenv(&env);
|
||||||
|
i += fesetenv(&env);
|
||||||
|
i += feholdexcept(&env);
|
||||||
|
if(i)
|
||||||
|
i += feupdateenv(&env);
|
||||||
|
|
||||||
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user