Make td::as safe.

GitOrigin-RevId: 84a76a434f88e09d9c74644aee139a96bb34239d
This commit is contained in:
levlam 2019-01-18 16:24:26 +03:00
parent b275a77a84
commit 0fc836ce8f

View File

@ -7,6 +7,7 @@
#pragma once
#include <cstring>
#include <type_traits>
namespace td {
@ -60,12 +61,14 @@ class ConstAs {
} // namespace detail
template <class ToT, class FromT>
template <class ToT, class FromT,
std::enable_if_t<std::is_trivially_copyable<ToT>::value && std::is_trivially_copyable<FromT>::value, int> = 0>
detail::As<ToT> as(FromT *from) {
return detail::As<ToT>(from);
}
template <class ToT, class FromT>
template <class ToT, class FromT,
std::enable_if_t<std::is_trivially_copyable<ToT>::value && std::is_trivially_copyable<FromT>::value, int> = 0>
const detail::ConstAs<ToT> as(const FromT *from) {
return detail::ConstAs<ToT>(from);
}