Home | History | Annotate | Download | only in base

Lines Matching defs:dest

89 template <class Dest, class Source>
90 inline Dest bit_cast(const Source& source) {
91 // Compile time assertion: sizeof(Dest) == sizeof(Source)
92 // A compile error here means your Dest and Source have different sizes.
93 static_assert(sizeof(Dest) == sizeof(Source), "sizes should be equal");
94 Dest dest;
95 memcpy(&dest, &source, sizeof(dest));
96 return dest;
100 // when converting to Dest.
101 template <typename Dest, typename Source>
102 constexpr Dest dchecked_integral_cast(Source source) {
104 // Check that the value is within the lower limit of Dest.
105 (static_cast<intmax_t>(std::numeric_limits<Dest>::min()) <=
107 source >= static_cast<Source>(std::numeric_limits<Dest>::min())) &&
108 // Check that the value is within the upper limit of Dest.
109 (static_cast<uintmax_t>(std::numeric_limits<Dest>::max()) >=
111 source <= static_cast<Source>(std::numeric_limits<Dest>::max())))
113 << " (would be " << static_cast<Dest>(source) << ")";
115 return static_cast<Dest>(source);
123 template <typename Dest, typename Source>
125 typename std::enable_if<!std::is_enum<Source>::value, Dest>::type
127 return static_cast<Dest>(
128 dchecked_integral_cast<typename std::underlying_type<Dest>::type>(value));
131 template <typename Dest = void, typename Source>
134 typename std::conditional<std::is_same<Dest, void>::value,
136 Identity<Dest>>::type>::type::type
138 using return_type = typename std::conditional<std::is_same<Dest, void>::value,
140 Identity<Dest>>::type::type;
148 template <typename Dest, typename Source>
149 inline Dest reinterpret_cast64(Source source) {
153 static_assert(std::is_pointer<Dest>::value, "Dest must be a pointer.");
156 return reinterpret_cast<Dest>(static_cast<uintptr_t>(source));
159 template <typename Dest, typename Source>
160 inline Dest reinterpret_cast64(Source* ptr) {
162 static_assert(std::is_same<Dest, int64_t>::value || std::is_same<Dest, uint64_t>::value,
163 "Dest must be int64_t or uint64_t.");
164 static_assert(sizeof(uintptr_t) <= sizeof(Dest), "Expecting at most 64-bit pointers.");
165 return static_cast<Dest>(reinterpret_cast<uintptr_t>(ptr));