std::numeric_limits::traps(3)
π std::numeric_limits::traps π
okay so this is the std::numeric_limits::traps(3) page from the C++ Standard Libary, and we're gonna make it make sense together π«Ά no cap.
π NAME π
std::numeric_limits::traps β std::numeric_limits::traps π
(yes bestie, it's giving name-so-nice-you-say-it-twice).
β¨ Synopsis β¨
here's the shape of it, and the version glow-up is right there:
static const bool traps; (until C++11)
static constexpr bool traps; (since C++11)
The value of std::numeric_limits<T>::traps is true for all arithmetic types T that have at least one value at the start of the program that, if used as an argument to an arithmetic operation, will generate a trap. literally that's the whole vibe check π₯
πΈ Standard specializations πΈ
here's the whole lineup for T and the value of std::numeric_limits<T>::traps β no skips, no shortcuts π
:
/* non-specialized */βfalseboolβfalsecharβusually truesigned charβusually trueunsigned charβusually truewchar_tβusually truechar8_t(since C++20)βusually truechar16_t(since C++11)βusually truechar32_t(since C++11)βusually trueshortβusually trueunsigned shortβusually trueintβusually trueunsigned intβusually truelongβusually trueunsigned longβusually truelong long(since C++11)βusually trueunsigned long long(since C++11)βusually truefloatβusually falsedoubleβusually falselong doubleβusually false
π§ Notes π§
okay so the tea β: on most platforms integer division by zero always traps, and std::numeric_limits<T>::traps is true for all integer types that support the value 0. The exception is the type bool: even though division by false traps due to integral promotion from bool to int, it is the zero-valued int that traps. Zero is not a value of type bool β periodt π
.
On most platforms, floating-point exceptions may be turned on and off at run time (e.g. feenableexcept() on Linux or _controlfp on Windows), in which case the value of std::numeric_limits<T>::traps for floating-point types reflects the state of floating-point trapping facility at the time of program startup, which is false on most modern systems. An exception would be a DEC Alpha program, where it is true if compiled without -ieee. iykyk π
π» Example π»
run this code, bestie β it's literally the glow-up of traps:
// Run this code
#include <iostream>
#include <limits>
int main()
{
std::cout << std::boolalpha
<< "bool: traps = " <<
std::numeric_limits<bool>::traps << '\n'
<< "char: traps = " <<
std::numeric_limits<char>::traps << '\n'
<< "char16_t: traps = " <<
std::numeric_limits<char16_t>::traps << '\n'
<< "long: traps = " <<
std::numeric_limits<long>::traps << '\n'
<< "float: traps = " <<
std::numeric_limits<float>::traps << '\n';
}
Possible output:
// GCC output:
bool: traps = true
char: traps = true
char16_t: traps = true
long: traps = true
float: traps = false
// Clang output:
bool: traps = false
char: traps = true
char16_t: traps = true
long: traps = true
float: traps = false
π©Ή Defect reports π©Ή
The following behavior-changing defect reports were applied retroactively to previously published C++ standards:
LWG 497β applied toC++98- behavior as published: it was unclear what is returned if the trapping is enabled or disabled at runtime
- correct behavior: returns the enable status at the start of the program
π See also π
Floating-point environment
tinyness_beforeβ identifies floating-point types that detect tinyness before rounding;[static](public static member constant)has_denorm_lossβ identifies the floating-point types that detect loss of precision as denormalization loss rather than inexact result;[static](public static member constant)
xoxo, your Unix bestie π β source/version: http://cppreference.com, date 2024.06.10, manual std::numeric_limits::traps(3) β¨π
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms