'Integer literal for fixed width integer types
Is there some c++ proposal for Integer literal for fixed width integer types like this?
// i's type is unsigned int
auto i = 10u;
// j's type is uint32_t
auto j = 10u32;
Solution 1:[1]
Yes: P1280R0 Integer Width Literals (published 2018-10-05).
It proposes the following literals:
namespace std::inline literals::inline integer_literals {
constexpr uint64_t operator ""u64 (unsigned long long arg);
constexpr uint32_t operator ""u32 (unsigned long long arg);
constexpr uint16_t operator ""u16 (unsigned long long arg);
constexpr uint8_t operator ""u8 (unsigned long long arg);
constexpr int64_t operator ""i64 (unsigned long long arg);
constexpr int32_t operator ""i32 (unsigned long long arg);
constexpr int16_t operator ""i16 (unsigned long long arg);
constexpr int8_t operator ""i8 (unsigned long long arg);
}
And its update P1280R1 that "Modifies return types to actually be [u]int_leastXX_t
and friends. This is to make sure that we are actually replacing the [U]INTxx_C
macros, as these return a [u]int_leastXX_t
":
namespace std::inline literals::inline integer_literals {
constexpr uint_least64_t operator ""u64 (unsigned long long arg);
constexpr uint_least32_t operator ""u32 (unsigned long long arg);
constexpr uint_least16_t operator ""u16 (unsigned long long arg);
constexpr uint_least8_t operator ""u8 (unsigned long long arg);
constexpr int_least64_t operator ""i64 (unsigned long long arg);
constexpr int_least32_t operator ""i32 (unsigned long long arg);
constexpr int_least16_t operator ""i16 (unsigned long long arg);
constexpr int_least8_t operator ""i8 (unsigned long long arg);
}
There is a 2019-06-12 update P1280R2 that makes the literals consteval
instead of constexpr
.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Remy Lebeau |