view: reduce ambiguity in make_byte_view
This commit is contained in:
parent
56ed44f0e3
commit
ab495bb0f7
46
view.hpp
46
view.hpp
@ -565,39 +565,29 @@ namespace util {
|
||||
//
|
||||
// useful for passing in memory structures to file descriptors and the
|
||||
// like. but the consequences of endian conversion is on the user...
|
||||
template <typename ByteT = std::byte, typename T>
|
||||
view<ByteT*>
|
||||
//
|
||||
// we have to be careful that rval-references and other temporaries aren't
|
||||
// accepted in this signature.
|
||||
template <
|
||||
typename ByteT = std::byte,
|
||||
typename T
|
||||
>
|
||||
auto
|
||||
make_byte_view (T &t)
|
||||
{
|
||||
auto first = reinterpret_cast<ByteT*> (&t);
|
||||
auto last = first + sizeof (t);
|
||||
return { first, last };
|
||||
using cursor_type = std::conditional_t<
|
||||
std::is_const_v<T>,
|
||||
ByteT const*,
|
||||
ByteT*
|
||||
>;
|
||||
|
||||
return util::view {
|
||||
reinterpret_cast<cursor_type> (&t),
|
||||
sizeof (T)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
template <typename T>
|
||||
view<std::byte*>
|
||||
make_byte_view (T&&) = delete;
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
template <typename ByteT = std::byte, typename T>
|
||||
view<const ByteT*>
|
||||
make_byte_view (const T &t)
|
||||
{
|
||||
auto first = reinterpret_cast<ByteT const*> (&t);
|
||||
auto last = first + sizeof (t);
|
||||
return { first, last };
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
template <typename T>
|
||||
view<const std::byte*>
|
||||
make_byte_view (const T &&t) = delete;
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <
|
||||
typename BeginA, typename EndA,
|
||||
|
Loading…
Reference in New Issue
Block a user