Skip to content

Commit 96479f9

Browse files
committed
In array_ref, apply constexpr to reinterpret_as when same size elements, and use std::data instead of std::begin now that std::string properly supports mutable data
1 parent 18284d4 commit 96479f9

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

source/Common.ArrayRef.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,10 @@ class array_ref
147147
template<typename NewType> array_ref<NewType> reinterpret_as()
148148
{
149149
size_type adjustedByteSize = size_in_bytes();
150-
adjustedByteSize -= adjustedByteSize % sizeof(NewType);
150+
if constexpr (sizeof(NewType) != sizeof(T))
151+
{
152+
adjustedByteSize -= adjustedByteSize % sizeof(NewType);
153+
}
151154
return array_ref<NewType>(
152155
reinterpret_cast<NewType*>(begin_),
153156
reinterpret_cast<NewType*>(to_byte_pointer(begin_) + adjustedByteSize)
@@ -241,11 +244,11 @@ array_ref<T> make_array_ref(T* begin, T* end)
241244
}
242245

243246
template <typename ContiguousContainer>
244-
auto make_array_ref(ContiguousContainer& container) -> array_ref<typename std::remove_reference<decltype(*std::begin(container))>::type>
247+
auto make_array_ref(ContiguousContainer& container) -> array_ref<typename std::remove_reference<decltype(*std::data(container))>::type>
245248
{
246249
// The remove_reference is necessary because decltype retains the reference
247250
// from std::vector's dereferenced iterator.
248-
using ArrayRefType = typename std::remove_reference<decltype(*std::begin(container))>::type;
251+
using ArrayRefType = typename std::remove_reference<decltype(*std::data(container))>::type;
249252
return array_ref<ArrayRefType>(container);
250253
}
251254

0 commit comments

Comments
 (0)