Commit 889ab33a authored by Robert Liao's avatar Robert Liao Committed by Commit Bot

MSVC Compatibility: span.h adjustments

1) C4146 (unary minus operator applied to unsigned type, result still unsigned) for
   constexpr size_t dynamic_extent = -1;

2) Workarounds for ternary expressions in templates (parens currently needed).

BUG=

Change-Id: Ia5d4ded07e819589800e957ce8cf369ddd6cd4ac
Reviewed-on: https://chromium-review.googlesource.com/1042806Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Commit-Queue: Robert Liao <robliao@chromium.org>
Cr-Commit-Position: refs/heads/master@{#555966}
parent a08daed0
......@@ -19,7 +19,7 @@
namespace base {
// [views.constants]
constexpr size_t dynamic_extent = -1;
constexpr size_t dynamic_extent = static_cast<size_t>(-1);
template <typename T, size_t Extent = dynamic_extent>
class span;
......@@ -266,10 +266,10 @@ class span {
template <size_t Offset, size_t Count = dynamic_extent>
constexpr span<T,
Count != dynamic_extent
(Count != dynamic_extent
? Count
: (Extent != dynamic_extent ? Extent - Offset
: dynamic_extent)>
: dynamic_extent))>
subspan() const noexcept {
static_assert(Extent == dynamic_extent || Offset <= Extent,
"Offset must not exceed Extent");
......@@ -389,7 +389,7 @@ constexpr bool operator>=(span<T, X> lhs, span<U, Y> rhs) noexcept {
// [span.objectrep], views of object representation
template <typename T, size_t X>
span<const uint8_t, X == dynamic_extent ? dynamic_extent : sizeof(T) * X>
span<const uint8_t, (X == dynamic_extent ? dynamic_extent : sizeof(T) * X)>
as_bytes(span<T, X> s) noexcept {
return {reinterpret_cast<const uint8_t*>(s.data()), s.size_bytes()};
}
......@@ -397,7 +397,7 @@ as_bytes(span<T, X> s) noexcept {
template <typename T,
size_t X,
typename = std::enable_if_t<!std::is_const<T>::value>>
span<uint8_t, X == dynamic_extent ? dynamic_extent : sizeof(T) * X>
span<uint8_t, (X == dynamic_extent ? dynamic_extent : sizeof(T) * X)>
as_writable_bytes(span<T, X> s) noexcept {
return {reinterpret_cast<uint8_t*>(s.data()), s.size_bytes()};
}
......
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