Skip to content

Commit 938d802

Browse files
committed
Span: Fix subspan return type
1 parent 54e2d92 commit 938d802

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

platform/Span.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,8 @@ struct Span {
243243
* @return
244244
*/
245245
template<std::ptrdiff_t Offset, std::ptrdiff_t Count>
246-
Span<element_type, Count> subspan() const {
246+
Span<element_type, Count == SPAN_DYNAMIC_EXTENT ? Extent - Offset : Count>
247+
subspan() const {
247248
MBED_STATIC_ASSERT(
248249
Offset == 0 || (Offset > 0 && Offset < Extent),
249250
"Invalid subspan offset"
@@ -253,7 +254,7 @@ struct Span {
253254
(Count >= 0 && Offset + Count <= Extent),
254255
"Invalid subspan count"
255256
);
256-
return Span<element_type, Count>(
257+
return Span<element_type, Count == SPAN_DYNAMIC_EXTENT ? Extent - Offset : Count>(
257258
_data + Offset,
258259
Count == SPAN_DYNAMIC_EXTENT ? Extent - Offset : Count
259260
);
@@ -506,13 +507,14 @@ struct Span<ElementType, SPAN_DYNAMIC_EXTENT> {
506507
* @return
507508
*/
508509
template<std::ptrdiff_t Offset, std::ptrdiff_t Count>
509-
Span<element_type, Count> subspan() const {
510-
MBED_ASSERT(Offset == 0 || (Offset > 0 && Offset < _size));
510+
Span<element_type, Count == SPAN_DYNAMIC_EXTENT ? SPAN_DYNAMIC_EXTENT : Count>
511+
subspan() const {
512+
MBED_ASSERT(0 <= Offset && Offset <= _size);
511513
MBED_ASSERT(
512514
(Count == SPAN_DYNAMIC_EXTENT) ||
513515
(Count >= 0 && Offset + Count <= _size)
514516
);
515-
return Span<element_type, Count>(
517+
return Span<element_type, Count == SPAN_DYNAMIC_EXTENT ? SPAN_DYNAMIC_EXTENT : Count>(
516518
_data + Offset,
517519
Count == SPAN_DYNAMIC_EXTENT ? _size - Offset : Count
518520
);

0 commit comments

Comments
 (0)