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:
John Maddock
2011-03-19 17:57:16 +00:00
parent cea6510410
commit 101aaca178

View File

@@ -34,20 +34,24 @@ int test()
#if !defined(FE_ALL_EXCEPT) #if !defined(FE_ALL_EXCEPT)
#error platform does not define FE_ALL_EXCEPT #error platform does not define FE_ALL_EXCEPT
#endif #endif
int i;
fexcept_t fe;
fenv_t env;
int (*has_feclearexcept)(int ) = ::feclearexcept; i = feclearexcept(FE_ALL_EXCEPT);
int (*has_fegetexceptflag)(fexcept_t *, int ) = fegetexceptflag; i += fetestexcept(FE_ALL_EXCEPT); // All flags should be zero
int (*has_feraiseexcept)(int ) = feraiseexcept; i += fegetexceptflag(&fe, FE_ALL_EXCEPT);
int (*has_fesetexceptflag)(const fexcept_t *, int ) = fesetexceptflag; i += fesetexceptflag(&fe, FE_ALL_EXCEPT);
int (*has_fetestexcept)(int ) = fetestexcept; i += feraiseexcept(0);
int (*has_fegetround)(void) = fegetround; i += fesetround(fegetround());
int (*has_fesetround)(int ) = fesetround; i += fegetenv(&env);
int (*has_fegetenv)(fenv_t *) = fegetenv; i += fesetenv(&env);
int (*has_feholdexcept)(fenv_t *) = feholdexcept; i += feholdexcept(&env);
int (*has_fesetenv)(const fenv_t *) = fesetenv; if(i)
int (*has_feupdateenv)(const fenv_t *) = feupdateenv; i += feupdateenv(&env);
return 0; return i;
} }
} }