// Copyright 2016 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_BIT_CAST_H_ #define BASE_BIT_CAST_H_ #include <type_traits> namespace base { // This is an equivalent to C++20's std::bit_cast<>(), but with additional // warnings. It morally does what `*reinterpret_cast<Dest*>(&source)` does, but // the cast/deref pair is undefined behavior, while bit_cast<>() isn't. // // This is not a magic "get out of UB free" card. This must only be used on // values, not on references or pointers. For pointers, use // reinterpret_cast<>(), and then look at https://eel.is/c++draft/basic.lval#11 // as that's probably UB also. template <class Dest, class Source> constexpr Dest bit_cast(const Source& source) { … } } // namespace base #endif // BASE_BIT_CAST_H_