in include/half.hpp [820:839]
template<std::float_round_style R,bool I> HALF_CONSTEXPR_NOERR unsigned int rounded(unsigned int value, int g, int s)
{
#if HALF_ERRHANDLING
value += (R==std::round_to_nearest) ? (g&(s|value)) :
(R==std::round_toward_infinity) ? (~(value>>15)&(g|s)) :
(R==std::round_toward_neg_infinity) ? ((value>>15)&(g|s)) : 0;
if((value&0x7C00) == 0x7C00)
raise(FE_OVERFLOW);
else if(value & 0x7C00)
raise(FE_INEXACT, I || (g|s)!=0);
else
raise(FE_UNDERFLOW, !(HALF_ERRHANDLING_UNDERFLOW_TO_INEXACT) || I || (g|s)!=0);
return value;
#else
return (R==std::round_to_nearest) ? (value+(g&(s|value))) :
(R==std::round_toward_infinity) ? (value+(~(value>>15)&(g|s))) :
(R==std::round_toward_neg_infinity) ? (value+((value>>15)&(g|s))) :
value;
#endif
}