@@ -243,7 +243,8 @@ struct Span {
243
243
* @return
244
244
*/
245
245
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 {
247
248
MBED_STATIC_ASSERT (
248
249
Offset == 0 || (Offset > 0 && Offset < Extent),
249
250
" Invalid subspan offset"
@@ -253,7 +254,7 @@ struct Span {
253
254
(Count >= 0 && Offset + Count <= Extent),
254
255
" Invalid subspan count"
255
256
);
256
- return Span<element_type, Count>(
257
+ return Span<element_type, Count == SPAN_DYNAMIC_EXTENT ? Extent - Offset : Count >(
257
258
_data + Offset,
258
259
Count == SPAN_DYNAMIC_EXTENT ? Extent - Offset : Count
259
260
);
@@ -506,13 +507,14 @@ struct Span<ElementType, SPAN_DYNAMIC_EXTENT> {
506
507
* @return
507
508
*/
508
509
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);
511
513
MBED_ASSERT (
512
514
(Count == SPAN_DYNAMIC_EXTENT) ||
513
515
(Count >= 0 && Offset + Count <= _size)
514
516
);
515
- return Span<element_type, Count>(
517
+ return Span<element_type, Count == SPAN_DYNAMIC_EXTENT ? SPAN_DYNAMIC_EXTENT : Count >(
516
518
_data + Offset,
517
519
Count == SPAN_DYNAMIC_EXTENT ? _size - Offset : Count
518
520
);
0 commit comments