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 @@ ...@@ -19,7 +19,7 @@
namespace base { namespace base {
// [views.constants] // [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> template <typename T, size_t Extent = dynamic_extent>
class span; class span;
...@@ -266,10 +266,10 @@ class span { ...@@ -266,10 +266,10 @@ class span {
template <size_t Offset, size_t Count = dynamic_extent> template <size_t Offset, size_t Count = dynamic_extent>
constexpr span<T, constexpr span<T,
Count != dynamic_extent (Count != dynamic_extent
? Count ? Count
: (Extent != dynamic_extent ? Extent - Offset : (Extent != dynamic_extent ? Extent - Offset
: dynamic_extent)> : dynamic_extent))>
subspan() const noexcept { subspan() const noexcept {
static_assert(Extent == dynamic_extent || Offset <= Extent, static_assert(Extent == dynamic_extent || Offset <= Extent,
"Offset must not exceed Extent"); "Offset must not exceed Extent");
...@@ -389,7 +389,7 @@ constexpr bool operator>=(span<T, X> lhs, span<U, Y> rhs) noexcept { ...@@ -389,7 +389,7 @@ constexpr bool operator>=(span<T, X> lhs, span<U, Y> rhs) noexcept {
// [span.objectrep], views of object representation // [span.objectrep], views of object representation
template <typename T, size_t X> 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 { as_bytes(span<T, X> s) noexcept {
return {reinterpret_cast<const uint8_t*>(s.data()), s.size_bytes()}; return {reinterpret_cast<const uint8_t*>(s.data()), s.size_bytes()};
} }
...@@ -397,7 +397,7 @@ as_bytes(span<T, X> s) noexcept { ...@@ -397,7 +397,7 @@ as_bytes(span<T, X> s) noexcept {
template <typename T, template <typename T,
size_t X, size_t X,
typename = std::enable_if_t<!std::is_const<T>::value>> 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 { as_writable_bytes(span<T, X> s) noexcept {
return {reinterpret_cast<uint8_t*>(s.data()), s.size_bytes()}; 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