c++c++11integerliterals

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

  • 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.


    Status update

    I found this issue tracking the paper: https://github.com/cplusplus/papers/issues/153

    The latest update is

    Jul 19, 2019

    Discussed in LEWG in Cologne - http://wiki.edg.com/bin/view/Wg21cologne2019/P1280

    Forward to LWG for C++23.

    SF F N A SA
    0 0 3 7 4

    Dropping, barring additional revision from the author discussing the points raised in the discussion.

    the table represents number of votes: (strongly) for / neutral / (strongly) against

    And in this Cologne 2019 LEWG Summary the resolution of the paper is "Discussed but not Approved nor Forwarded"