Commit ea76c5ad by John Plate Committed by Commit Bot

Add scrict type checking for reinterpret_cast

Bug: angleproject:5891 Change-Id: I4077fea7fde91465fa71df843c313c4dd8e31e0a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2846835Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: John Plate <jplate@google.com>
parent 7a161a56
...@@ -761,6 +761,14 @@ template <typename EnumT, typename FromT> ...@@ -761,6 +761,14 @@ template <typename EnumT, typename FromT>
typename std::enable_if<std::is_pointer<FromT>::value && !std::is_enum<EnumT>::value, EnumT>::type typename std::enable_if<std::is_pointer<FromT>::value && !std::is_enum<EnumT>::value, EnumT>::type
PackParam(FromT from) PackParam(FromT from)
{ {
static_assert(sizeof(typename std::remove_pointer<EnumT>::type) ==
sizeof(typename std::remove_pointer<FromT>::type),
"Types have different sizes");
static_assert(
std::is_same<
decltype(std::remove_pointer<EnumT>::type::value),
typename std::remove_const<typename std::remove_pointer<FromT>::type>::type>::value,
"Data types are different");
return reinterpret_cast<EnumT>(from); return reinterpret_cast<EnumT>(from);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment