Export of internal Abseil changes.
-- 5755b40f6025f3ca126070fc68adb8fde9a7f01b by Abseil Team <absl-team@google.com>: Fix -Wextra-semi error. PiperOrigin-RevId: 243215850 -- 3b6b6e18df9fbd233943cae460f0063f4efaa7c7 by Eric Fiselier <ericwf@google.com>: Internal Change. PiperOrigin-RevId: 243152671 -- 82eef03f246009c806c25607c5682547cb4ad21e by Abseil Team <absl-team@google.com>: Internal change. PiperOrigin-RevId: 243151861 -- c14e6340fca7070634e0ecfdf97833d930dd0e5d by Samuel Benzaquen <sbenza@google.com>: Internal change PiperOrigin-RevId: 243123590 -- 9abb7a6b22457c0aa72d72b3b9392efd226d302a by Andy Getzendanner <durandal@google.com>: Implement operator<<(std::ostream &, absl::LogSeverity) so that absl::LogSeverity values can be streamed. PiperOrigin-RevId: 243117646 GitOrigin-RevId: 5755b40f6025f3ca126070fc68adb8fde9a7f01b Change-Id: I7ea607d8a4e803ad15a3090139271f58ad4173a3
This commit is contained in:
parent
0b545b4601
commit
a02f62f456
12 changed files with 281 additions and 26 deletions
|
|
@ -30,28 +30,20 @@
|
|||
|
||||
#include "absl/base/internal/identity.h"
|
||||
#include "absl/base/macros.h"
|
||||
#include "absl/meta/type_traits.h"
|
||||
|
||||
namespace absl {
|
||||
|
||||
namespace internal_casts {
|
||||
|
||||
// NOTE: Not a fully compliant implementation of `std::is_trivially_copyable`.
|
||||
// TODO(calabrese) Branch on implementations that directly provide
|
||||
// `std::is_trivially_copyable`, create a more rigorous workaround, and publicly
|
||||
// expose in meta/type_traits.
|
||||
template <class T>
|
||||
struct is_trivially_copyable
|
||||
: std::integral_constant<
|
||||
bool, std::is_destructible<T>::value&& __has_trivial_destructor(T) &&
|
||||
__has_trivial_copy(T) && __has_trivial_assign(T)> {};
|
||||
|
||||
template <class Dest, class Source>
|
||||
struct is_bitcastable
|
||||
: std::integral_constant<bool,
|
||||
sizeof(Dest) == sizeof(Source) &&
|
||||
is_trivially_copyable<Source>::value &&
|
||||
is_trivially_copyable<Dest>::value &&
|
||||
std::is_default_constructible<Dest>::value> {};
|
||||
: std::integral_constant<
|
||||
bool,
|
||||
sizeof(Dest) == sizeof(Source) &&
|
||||
type_traits_internal::is_trivially_copyable<Source>::value &&
|
||||
type_traits_internal::is_trivially_copyable<Dest>::value &&
|
||||
std::is_default_constructible<Dest>::value> {};
|
||||
|
||||
} // namespace internal_casts
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue