// These values can be overridden in the target configuration file.
// The default values are appropriate for many 32-bit targets.
-#ifndef __glibcpp_char_traps
-# define __glibcpp_char_traps true
-#endif
-#ifndef __glibcpp_short_traps
-# define __glibcpp_short_traps true
-#endif
-#ifndef __glibcpp_int_traps
-# define __glibcpp_int_traps true
-#endif
-#ifndef __glibcpp_long_traps
-# define __glibcpp_long_traps true
-#endif
-#ifndef __glibcpp_wchar_t_traps
-# define __glibcpp_wchar_t_traps true
-#endif
-#ifndef __glibcpp_long_long_traps
-# define __glibcpp_long_long_traps true
+// GCC only intrinsicly supports modulo integral types. The only remaining
+// integral exceptional values is division by zero. Only targets that do not
+// signal division by zero in some "hard to ignore" way should use false.
+#ifndef __glibcpp_integral_traps
+# define __glibcpp_integral_traps true
#endif
// You should not need to define any macros below this point, unless
#define __glibcpp_u64_digits10 19
// bool-specific hooks:
-// __glibcpp_bool_digits __glibcpp_int_traps __glibcpp_long_traps
+// __glibcpp_bool_digits
#ifndef __glibcpp_bool_digits
# define __glibcpp_bool_digits 1
// char.
-#define __glibcpp_plain_char_traps true
-#define __glibcpp_signed_char_traps true
-#define __glibcpp_unsigned_char_traps true
-#ifndef __glibcpp_char_is_modulo
-# define __glibcpp_char_is_modulo true
-#endif
-#ifndef __glibcpp_signed_char_is_modulo
-# define __glibcpp_signed_char_is_modulo true
-#endif
#if __CHAR_BIT__ == 8
# define __glibcpp_signed_char_min __glibcpp_s8_min
# define __glibcpp_signed_char_max __glibcpp_s8_max
// short
-#define __glibcpp_signed_short_traps true
-#define __glibcpp_unsigned_short_traps true
-#ifndef __glibcpp_signed_short_is_modulo
-# define __glibcpp_signed_short_is_modulo true
-#endif
#if __SHRT_BIT__ == 8
# define __glibcpp_signed_short_min __glibcpp_s8_min
# define __glibcpp_signed_short_max __glibcpp_s8_max
// int
-#define __glibcpp_signed_int_traps true
-#define __glibcpp_unsigned_int_traps true
-#ifndef __glibcpp_signed_int_is_modulo
-# define __glibcpp_signed_int_is_modulo true
-#endif
#if __INT_BIT__ == 8
# define __glibcpp_signed_int_min __glibcpp_s8_min
# define __glibcpp_signed_int_max __glibcpp_s8_max
// long
-#define __glibcpp_signed_long_traps true
-#define __glibcpp_unsigned_long_traps true
-#ifndef __glibcpp_signed_long_is_modulo
-# define __glibcpp_signed_long_is_modulo true
-#endif
#if __LONG_BIT__ == 8
# define __glibcpp_signed_long_min __glibcpp_s8_min
# define __glibcpp_signed_long_max __glibcpp_s8_max
// long long
-#define __glibcpp_signed_long_long_traps true
-#define __glibcpp_signed_long_long_traps true
-#ifndef __glibcpp_signed_long_long_is_modulo
-# define __glibcpp_signed_long_long_is_modulo true
-#endif
#if __LONG_LONG_BIT__ == 8
# define __glibcpp_signed_long_long_min __glibcpp_s8_min
# define __glibcpp_signed_long_long_max __glibcpp_s8_max
# define __glibcpp_signed_long_long_max __glibcpp_s64_max
# define __glibcpp_signed_long_long_digits __glibcpp_s64_digits
# define __glibcpp_signed_long_long_digits10 __glibcpp_s64_digits10
-# define __glibcpp_signed_long_long_traps true
# define __glibcpp_unsigned_long_long_min __glibcpp_u64_min
# define __glibcpp_unsigned_long_long_max __glibcpp_u64_max
# define __glibcpp_unsigned_long_long_digits __glibcpp_u64_digits
# define __glibcpp_unsigned_long_long_digits10 __glibcpp_u64_digits10
-# define __glibcpp_unsigned_long_long_traps true
#else
// You must define these macros in the configuration file.
#endif
// wchar_t
-#define __glibcpp_wchar_t_traps true
-#ifndef __glibcpp_wchar_t_is_modulo
-# define __glibcpp_wchar_t_is_modulo true
-#endif
#if __glibcpp_wchar_t_is_signed
# if __WCHAR_BIT__ == 8
# define __glibcpp_wchar_t_min __glibcpp_s8_min
# define __glibcpp_float_has_denorm_loss false
#endif
-#ifndef __glibcpp_float_is_bounded
-# define __glibcpp_float_is_bounded true
-#endif
-
#ifndef __glibcpp_float_is_modulo
# define __glibcpp_float_is_modulo false
#endif
# define __glibcpp_double_has_denorm_loss false
#endif
-#ifndef __glibcpp_double_is_bounded
-# define __glibcpp_double_is_bounded true
-#endif
-
#ifndef __glibcpp_double_is_modulo
# define __glibcpp_double_is_modulo false
#endif
# define __glibcpp_long_double_has_denorm_loss false
#endif
-#ifndef __glibcpp_long_double_is_bounded
-# define __glibcpp_long_double_is_bounded true
-#endif
-
#ifndef __glibcpp_long_double_is_modulo
# define __glibcpp_long_double_is_modulo false
#endif
// It is not clear what it means for a boolean type to trap.
// This is a DR on the LWG issue list. Here, I use integer
// promotion semantics.
- static const bool traps = __glibcpp_signed_int_traps
- || __glibcpp_signed_long_traps;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
static const bool is_iec559 = false;
static const bool is_bounded = true;
- static const bool is_modulo = __glibcpp_char_is_modulo;
+ static const bool is_modulo = true;
- static const bool traps = __glibcpp_char_traps;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
#undef __glibcpp_char_digits
#undef __glibcpp_char_digits10
#undef __glibcpp_char_is_signed
-#undef __glibcpp_char_is_modulo
-#undef __glibcpp_char_traps
static const bool is_iec559 = false;
static const bool is_bounded = true;
- static const bool is_modulo = __glibcpp_signed_char_is_modulo;
+ static const bool is_modulo = true;
- static const bool traps = __glibcpp_signed_char_traps;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
#undef __glibcpp_signed_char_max
#undef __glibcpp_signed_char_digits
#undef __glibcpp_signed_char_digits10
-#undef __glibcpp_signed_char_is_modulo
-#undef __glibcpp_signed_char_traps
template<>
struct numeric_limits<unsigned char>
static const bool is_bounded = true;
static const bool is_modulo = true;
- static const bool traps = __glibcpp_unsigned_char_traps;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
#undef __glibcpp_unsigned_char_max
#undef __glibcpp_unsigned_char_digits
#undef __glibcpp_unsigned_char_digits10
-#undef __glibcpp_unsigned_char_traps
template<>
struct numeric_limits<wchar_t>
static const bool is_iec559 = false;
static const bool is_bounded = true;
- static const bool is_modulo = __glibcpp_wchar_t_is_modulo;
+ static const bool is_modulo = true;
- static const bool traps = __glibcpp_wchar_t_traps;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
#undef __glibcpp_wchar_t_digits
#undef __glibcpp_wchar_t_digits10
#undef __glibcpp_wchar_t_is_signed
-#undef __glibcpp_wchar_t_is_modulo
-#undef __glibcpp_wchar_t_traps
template<>
struct numeric_limits<short>
static const bool is_iec559 = true;
static const bool is_bounded = true;
- static const bool is_modulo = __glibcpp_signed_short_is_modulo;
+ static const bool is_modulo = true;
- static const bool traps = __glibcpp_signed_short_traps;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
#undef __glibcpp_signed_short_max
#undef __glibcpp_signed_short_digits
#undef __glibcpp_signed_short_digits10
-#undef __glibcpp_signed_short_is_modulo
-#undef __glibcpp_signed_short_traps
template<>
struct numeric_limits<unsigned short>
static const bool is_bounded = true;
static const bool is_modulo = true;
- static const bool traps = __glibcpp_unsigned_short_traps;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
#undef __glibcpp_unsigned_short_max
#undef __glibcpp_unsigned_short_digits
#undef __glibcpp_unsigned_short_digits10
-#undef __glibcpp_unsigned_short_traps
template<>
struct numeric_limits<int>
static const bool is_iec559 = true;
static const bool is_bounded = true;
- static const bool is_modulo = __glibcpp_signed_int_is_modulo;
+ static const bool is_modulo = true;
- static const bool traps = __glibcpp_signed_int_traps;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
#undef __glibcpp_signed_int_max
#undef __glibcpp_signed_int_digits
#undef __glibcpp_signed_int_digits10
-#undef __glibcpp_signed_int_is_modulo
-#undef __glibcpp_signed_int_traps
template<>
struct numeric_limits<unsigned int>
static const bool is_bounded = true;
static const bool is_modulo = true;
- static const bool traps = __glibcpp_unsigned_int_traps;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
#undef __glibcpp_unsigned_int_max
#undef __glibcpp_unsigned_int_digits
#undef __glibcpp_unsigned_int_digits10
-#undef __glibcpp_unsigned_int_traps
template<>
struct numeric_limits<long>
static const bool is_iec559 = true;
static const bool is_bounded = true;
- static const bool is_modulo = __glibcpp_signed_long_is_modulo;
+ static const bool is_modulo = true;
- static const bool traps = __glibcpp_signed_long_traps;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
#undef __glibcpp_signed_long_max
#undef __glibcpp_signed_long_digits
#undef __glibcpp_signed_long_digits10
-#undef __glibcpp_signed_long_is_modulo
-#undef __glibcpp_signed_long_traps
template<>
struct numeric_limits<unsigned long>
static const bool is_bounded = true;
static const bool is_modulo = true;
- static const bool traps = __glibcpp_unsigned_long_traps;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
#undef __glibcpp_unsigned_long_max
#undef __glibcpp_unsigned_long_digits
#undef __glibcpp_unsigned_long_digits10
-#undef __glibcpp_unsigned_long_traps
template<>
struct numeric_limits<long long>
static const bool is_iec559 = true;
static const bool is_bounded = true;
- static const bool is_modulo = __glibcpp_signed_long_long_is_modulo;
+ static const bool is_modulo = true;
- static const bool traps = __glibcpp_signed_long_long_traps;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
#undef __glibcpp_signed_long_long_max
#undef __glibcpp_signed_long_long_digits
#undef __glibcpp_signed_long_long_digits10
-#undef __glibcpp_signed_long_long_is_modulo
-#undef __glibcpp_signed_long_long_traps
template<>
struct numeric_limits<unsigned long long>
static const bool is_bounded = true;
static const bool is_modulo = true;
- static const bool traps = true;
+ static const bool traps = __glibcpp_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};
#undef __glibcpp_unsigned_long_long_max
#undef __glibcpp_unsigned_long_long_digits
#undef __glibcpp_unsigned_long_long_digits10
-#undef __glibcpp_unsigned_long_long_traps
template<>
struct numeric_limits<float>
{ return __FLT_DENORM_MIN__; }
static const bool is_iec559 = has_infinity && has_quiet_NaN;
- static const bool is_bounded = __glibcpp_float_is_bounded;
+ static const bool is_bounded = true;
static const bool is_modulo = __glibcpp_float_is_modulo;
static const bool traps = __glibcpp_float_traps;
};
#undef __glibcpp_float_has_denorm_loss
-#undef __glibcpp_float_is_bounded
#undef __glibcpp_float_is_modulo
#undef __glibcpp_float_traps
#undef __glibcpp_float_tinyness_before
{ return __DBL_DENORM_MIN__; }
static const bool is_iec559 = has_infinity && has_quiet_NaN;
- static const bool is_bounded = __glibcpp_double_is_bounded;
+ static const bool is_bounded = true;
static const bool is_modulo = __glibcpp_double_is_modulo;
static const bool traps = __glibcpp_double_traps;
};
#undef __glibcpp_double_has_denorm_loss
-#undef __glibcpp_double_is_bounded
#undef __glibcpp_double_is_modulo
#undef __glibcpp_double_traps
#undef __glibcpp_double_tinyness_before
{ return __LDBL_DENORM_MIN__; }
static const bool is_iec559 = has_infinity && has_quiet_NaN;
- static const bool is_bounded = __glibcpp_long_double_is_bounded;
+ static const bool is_bounded = true;
static const bool is_modulo = __glibcpp_long_double_is_modulo;
static const bool traps = __glibcpp_long_double_traps;
};
#undef __glibcpp_long_double_has_denorm_loss
-#undef __glibcpp_long_double_is_bounded
#undef __glibcpp_long_double_is_modulo
#undef __glibcpp_long_double_traps
#undef __glibcpp_long_double_tinyness_before