Iros
 
Loading...
Searching...
No Matches
integral.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/types/prelude.h"
6
7namespace di {
8inline namespace literals {
9 inline namespace integral_literals {
10#define DI_INTEGER_LITERAL(Type) \
11 consteval auto operator""_##Type(unsigned long long value)->Type { \
12 if (!math::representable_as<Type>(value)) { \
13 util::compile_time_fail<>(); \
14 } \
15 return Type(value); \
16 }
17
32
33#ifdef DI_HAVE_128_BIT_INTEGERS
36#endif
37
38#undef DI_INTEGER_LITERAL
39
40 consteval auto operator""_b(unsigned long long value) -> Byte {
41 if (!math::representable_as<u8>(value)) {
43 }
44 return Byte(value);
45 }
46
47 consteval auto operator""_b(char value) -> Byte {
48 if (!math::representable_as<u8>(value)) {
50 }
51 return Byte(value);
52 }
53 }
54}
55}
56
57#if !defined(DI_NO_GLOBALS) && !defined(DI_NO_GLOBAL_INTEGRAL_LITERALS)
59#endif
#define DI_INTEGER_LITERAL(Type)
Definition integral.h:10
Definition integral.h:9
Definition duration_literals.h:20
constexpr auto representable_as
Definition representable_as.h:19
ssize_t isize
Definition integers.h:34
__INT16_TYPE__ i16
Definition integers.h:15
std::byte Byte
Definition byte.h:63
size_t usize
Definition integers.h:33
uintptr_t uptr
Definition integers.h:36
__UINT64_TYPE__ u64
Definition integers.h:12
__INT8_TYPE__ i8
Definition integers.h:14
uintmax_t umax
Definition integers.h:39
intmax_t imax
Definition integers.h:40
__UINT8_TYPE__ u8
Definition integers.h:9
__INT32_TYPE__ i32
Definition integers.h:16
__UINT32_TYPE__ u32
Definition integers.h:11
ptrdiff_t iptr
Definition integers.h:37
__INT64_TYPE__ i64
Definition integers.h:17
__UINT16_TYPE__ u16
Definition integers.h:10
void compile_time_fail()
Definition compile_time_fail.h:7
Definition zstring_parser.h:9