config/test/boost_no_fenv_h.ipp
jzmaddock f0c99f7b7f Suppress more GCC warnings.
Fix GCC compile failure in lambda test case.
2014-06-10 18:22:10 +01:00

59 lines
1.5 KiB
C++

// (C) Copyright John Maddock 2001.
// (C) Copyright Bryce Lelbach 2010.
// Use, modification and distribution are subject to the
// Boost Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org/libs/config for most recent version.
// MACRO: BOOST_NO_FENV_H
// TITLE: fenv.h
// DESCRIPTION: There is no standard <fenv.h> available. If <fenv.h> is
// available, <boost/detail/fenv.hpp> should be included
// instead of directly including <fenv.h>.
#include <fenv.h>
namespace boost_no_fenv_h {
int test()
{
/// C++0x required typedefs
typedef ::fenv_t has_fenv_t;
typedef ::fexcept_t has_fexcept_t;
/// C++0x required macros
#if !defined(FE_DIVBYZERO)
#error platform does not define FE_DIVBYZERO
#endif
#if !defined(FE_INEXACT)
#error platform does not define FE_INEXACT
#endif
#if !defined(FE_ALL_EXCEPT)
#error platform does not define FE_ALL_EXCEPT
#endif
int i;
has_fexcept_t fe;
has_fenv_t env;
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;
}
}