in include/half.hpp [625:671]
inline void raise(int HALF_UNUSED_NOERR(flags), bool HALF_UNUSED_NOERR(cond) = true)
{
#if HALF_ERRHANDLING
if(!cond)
return;
#if HALF_ERRHANDLING_FLAGS
errflags() |= flags;
#endif
#if HALF_ERRHANDLING_ERRNO
if(flags & FE_INVALID)
errno = EDOM;
else if(flags & (FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW))
errno = ERANGE;
#endif
#if HALF_ERRHANDLING_FENV && HALF_ENABLE_CPP11_CFENV
std::feraiseexcept(flags);
#endif
#ifdef HALF_ERRHANDLING_THROW_INVALID
if(flags & FE_INVALID)
throw std::domain_error(HALF_ERRHANDLING_THROW_INVALID);
#endif
#ifdef HALF_ERRHANDLING_THROW_DIVBYZERO
if(flags & FE_DIVBYZERO)
throw std::domain_error(HALF_ERRHANDLING_THROW_DIVBYZERO);
#endif
#ifdef HALF_ERRHANDLING_THROW_OVERFLOW
if(flags & FE_OVERFLOW)
throw std::overflow_error(HALF_ERRHANDLING_THROW_OVERFLOW);
#endif
#ifdef HALF_ERRHANDLING_THROW_UNDERFLOW
if(flags & FE_UNDERFLOW)
throw std::underflow_error(HALF_ERRHANDLING_THROW_UNDERFLOW);
#endif
#ifdef HALF_ERRHANDLING_THROW_INEXACT
if(flags & FE_INEXACT)
throw std::range_error(HALF_ERRHANDLING_THROW_INEXACT);
#endif
#if HALF_ERRHANDLING_UNDERFLOW_TO_INEXACT
if((flags & FE_UNDERFLOW) && !(flags & FE_INEXACT))
raise(FE_INEXACT);
#endif
#if HALF_ERRHANDLING_OVERFLOW_TO_INEXACT
if((flags & FE_OVERFLOW) && !(flags & FE_INEXACT))
raise(FE_INEXACT);
#endif
#endif
}