// This is C++20's std::bit_cast<>(). It morally does what // `*reinterpret_cast<Dest*>(&source)` does, but the cast/deref pair is // undefined behavior, while bit_cast<>() isn't. template <class Dest, class Source> #if HAS_BUILTIN(__builtin_bit_cast)
constexpr #else inline #endif
Dest
bit_cast(const Source& source) { #if HAS_BUILTIN(__builtin_bit_cast) // TODO(thakis): Keep only this codepath once nacl is gone or updated. return __builtin_bit_cast(Dest, source); #else
static_assert(sizeof(Dest) == sizeof(Source), "bit_cast requires source and destination to be the same size");
static_assert(std::is_trivially_copyable_v<Dest>, "bit_cast requires the destination type to be copyable");
static_assert(std::is_trivially_copyable_v<Source>, "bit_cast requires the source type to be copyable");
Dest dest;
memcpy(&dest, &source, sizeof(dest)); return dest; #endif
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.