10292
10292
template<class ElementType, size_t Extent>
10293
10293
span<byte, Extent == dynamic_extent ? dynamic_extent : sizeof(ElementType) * Extent>
10294
10294
as_writable_bytes(span<ElementType, Extent> s) noexcept;
10295
+
10296
+ // \ref {span.tuple }, tuple interface
10297
+ template<class T> class tuple_size;
10298
+ template<size_t I, class T> class tuple_element;
10299
+ template<class ElementType, size_t Extent>
10300
+ struct tuple_size<span<ElementType, Extent>>;
10301
+ template<class ElementType>
10302
+ struct tuple_size<span<ElementType, dynamic_extent>>; // not defined
10303
+ template<size_t I, class ElementType, size_t Extent>
10304
+ struct tuple_element<I, span<ElementType, Extent>>;
10305
+ template<size_t I, class ElementType, size_t Extent>
10306
+ constexpr ElementType& get(span<ElementType, Extent>) noexcept;
10295
10307
}
10296
10308
\end {codeblock }
10297
10309
@@ -10377,11 +10389,12 @@
10377
10389
// \ref {span.obs }, observers
10378
10390
constexpr index_type size() const noexcept;
10379
10391
constexpr index_type size_bytes() const noexcept;
10380
- constexpr bool empty() const noexcept;
10392
+ [[nodiscard]] constexpr bool empty() const noexcept;
10381
10393
10382
10394
// \ref {span.elem }, element access
10383
10395
constexpr reference operator[](index_type idx) const;
10384
- constexpr reference operator()(index_type idx) const;
10396
+ constexpr reference front() const;
10397
+ constexpr reference back() const;
10385
10398
constexpr pointer data() const noexcept;
10386
10399
10387
10400
// \ref {span.iterators }, iterator support
10425
10438
\begin {itemdecl }
10426
10439
constexpr span() noexcept;
10427
10440
\end {itemdecl }
10441
+
10428
10442
\begin {itemdescr }
10429
10443
\pnum
10430
10444
\constraints
10439
10453
\begin {itemdecl }
10440
10454
constexpr span(pointer ptr, index_type count);
10441
10455
\end {itemdecl }
10456
+
10442
10457
\begin {itemdescr }
10443
10458
\pnum
10444
10459
\expects \range {ptr}{ptr + count} is a valid range.
10462
10477
\begin {itemdecl }
10463
10478
constexpr span(pointer first, pointer last);
10464
10479
\end {itemdecl }
10480
+
10465
10481
\begin {itemdescr }
10466
10482
\pnum
10467
10483
\expects
10488
10504
template<size_t N> constexpr span(array<value_type, N>& arr) noexcept;
10489
10505
template<size_t N> constexpr span(const array<value_type, N>& arr) noexcept;
10490
10506
\end {itemdecl }
10507
+
10491
10508
\begin {itemdescr }
10492
10509
\pnum
10493
10510
\constraints
10510
10527
template<class Container> constexpr span(Container& cont);
10511
10528
template<class Container> constexpr span(const Container& cont);
10512
10529
\end {itemdecl }
10530
+
10513
10531
\begin {itemdescr }
10514
10532
\pnum
10515
10533
\constraints
10543
10561
\begin {itemdecl }
10544
10562
constexpr span(const span& other) noexcept = default;
10545
10563
\end {itemdecl }
10564
+
10546
10565
\begin {itemdescr }
10547
10566
\pnum
10548
10567
\ensures
10554
10573
template<class OtherElementType, size_t OtherExtent>
10555
10574
constexpr span(const span<OtherElementType, OtherExtent>& s) noexcept;
10556
10575
\end {itemdecl }
10576
+
10557
10577
\begin {itemdescr }
10558
10578
\pnum
10559
10579
\constraints
10576
10596
\begin {itemdecl }
10577
10597
constexpr span& operator=(const span& other) noexcept = default;
10578
10598
\end {itemdecl }
10599
+
10579
10600
\begin {itemdescr }
10580
10601
\pnum
10581
10602
\ensures
10588
10609
\begin {itemdecl }
10589
10610
template<size_t Count> constexpr span<element_type, Count> first() const;
10590
10611
\end {itemdecl }
10612
+
10591
10613
\begin {itemdescr }
10592
10614
\pnum
10593
10615
\expects
10602
10624
\begin {itemdecl }
10603
10625
template<size_t Count> constexpr span<element_type, Count> last() const;
10604
10626
\end {itemdecl }
10627
+
10605
10628
\begin {itemdescr }
10606
10629
\pnum
10607
10630
\expects
10617
10640
template<size_t Offset, size_t Count = dynamic_extent>
10618
10641
constexpr span<element_type, @\seebelow@ > subspan() const;
10619
10642
\end {itemdecl }
10643
+
10620
10644
\begin {itemdescr }
10621
10645
\pnum
10622
10646
\expects
10647
10671
\begin {itemdecl }
10648
10672
constexpr span<element_type, dynamic_extent> first(index_type count) const;
10649
10673
\end {itemdecl }
10674
+
10650
10675
\begin {itemdescr }
10651
10676
\pnum
10652
10677
\expects
10661
10686
\begin {itemdecl }
10662
10687
constexpr span<element_type, dynamic_extent> last(index_type count) const;
10663
10688
\end {itemdecl }
10689
+
10664
10690
\begin {itemdescr }
10665
10691
\pnum
10666
10692
\expects
10676
10702
constexpr span<element_type, dynamic_extent> subspan(
10677
10703
index_type offset, index_type count = dynamic_extent) const;
10678
10704
\end {itemdecl }
10705
+
10679
10706
\begin {itemdescr }
10680
10707
\pnum
10681
10708
\expects
10698
10725
\begin {itemdecl }
10699
10726
constexpr index_type size() const noexcept;
10700
10727
\end {itemdecl }
10728
+
10701
10729
\begin {itemdescr }
10702
10730
\pnum
10703
10731
\effects
10708
10736
\begin {itemdecl }
10709
10737
constexpr index_type size_bytes() const noexcept;
10710
10738
\end {itemdecl }
10739
+
10711
10740
\begin {itemdescr }
10712
10741
\pnum
10713
10742
\effects
10716
10745
10717
10746
\indexlibrarymember {span}{empty}%
10718
10747
\begin {itemdecl }
10719
- constexpr bool empty() const noexcept;
10748
+ [[nodiscard]] constexpr bool empty() const noexcept;
10720
10749
\end {itemdecl }
10750
+
10721
10751
\begin {itemdescr }
10722
10752
\pnum
10723
10753
\effects
@@ -10727,11 +10757,10 @@
10727
10757
\rSec 3[span.elem]{Element access}
10728
10758
10729
10759
\indexlibrary {\idxcode {operator[]}!\idxcode {span}}%
10730
- \indexlibrary {\idxcode {operator()}!\idxcode {span}}%
10731
10760
\begin {itemdecl }
10732
10761
constexpr reference operator[](index_type idx) const;
10733
- constexpr reference operator()(index_type idx) const;
10734
10762
\end {itemdecl }
10763
+
10735
10764
\begin {itemdescr }
10736
10765
\pnum
10737
10766
\expects
@@ -10742,10 +10771,41 @@
10742
10771
Equivalent to: \tcode {return *(data() + idx);}
10743
10772
\end {itemdescr }
10744
10773
10774
+ \indexlibrarymember {span}{front}%
10775
+ \begin {itemdecl }
10776
+ constexpr reference front() const;
10777
+ \end {itemdecl }
10778
+
10779
+ \begin {itemdescr }
10780
+ \pnum
10781
+ \expects
10782
+ \tcode {empty()} is \tcode {false}.
10783
+
10784
+ \pnum
10785
+ \effects
10786
+ Equivalent to: \tcode {return *data();}
10787
+ \end {itemdescr }
10788
+
10789
+ \indexlibrarymember {span}{back}%
10790
+ \begin {itemdecl }
10791
+ constexpr reference back() const;
10792
+ \end {itemdecl }
10793
+
10794
+ \begin {itemdescr }
10795
+ \pnum
10796
+ \expects
10797
+ \tcode {empty()} is \tcode {false}.
10798
+
10799
+ \pnum
10800
+ \effects
10801
+ Equivalent to: \tcode {return *(data() + (size() - 1));}
10802
+ \end {itemdescr }
10803
+
10745
10804
\indexlibrarymember {span}{data}%
10746
10805
\begin {itemdecl }
10747
10806
constexpr pointer data() const noexcept;
10748
10807
\end {itemdecl }
10808
+
10749
10809
\begin {itemdescr }
10750
10810
\pnum
10751
10811
\effects
10758
10818
\begin {itemdecl }
10759
10819
constexpr iterator begin() const noexcept;
10760
10820
\end {itemdecl }
10821
+
10761
10822
\begin {itemdescr }
10762
10823
\pnum
10763
10824
\returns
10770
10831
\begin {itemdecl }
10771
10832
constexpr iterator end() const noexcept;
10772
10833
\end {itemdecl }
10834
+
10773
10835
\begin {itemdescr }
10774
10836
\pnum
10775
10837
\returns
10780
10842
\begin {itemdecl }
10781
10843
constexpr reverse_iterator rbegin() const noexcept;
10782
10844
\end {itemdecl }
10845
+
10783
10846
\begin {itemdescr }
10784
10847
\pnum
10785
10848
\effects
10790
10853
\begin {itemdecl }
10791
10854
constexpr reverse_iterator rend() const noexcept;
10792
10855
\end {itemdecl }
10856
+
10793
10857
\begin {itemdescr }
10794
10858
\pnum
10795
10859
\returns
10800
10864
\begin {itemdecl }
10801
10865
constexpr const_iterator cbegin() const noexcept;
10802
10866
\end {itemdecl }
10867
+
10803
10868
\begin {itemdescr }
10804
10869
\pnum
10805
10870
\returns
10812
10877
\begin {itemdecl }
10813
10878
constexpr const_iterator cend() const noexcept;
10814
10879
\end {itemdecl }
10880
+
10815
10881
\begin {itemdescr }
10816
10882
\pnum
10817
10883
\returns
10822
10888
\begin {itemdecl }
10823
10889
constexpr const_reverse_iterator crbegin() const noexcept;
10824
10890
\end {itemdecl }
10891
+
10825
10892
\begin {itemdescr }
10826
10893
\pnum
10827
10894
\effects
10832
10899
\begin {itemdecl }
10833
10900
constexpr const_reverse_iterator crend() const noexcept;
10834
10901
\end {itemdecl }
10902
+
10835
10903
\begin {itemdescr }
10836
10904
\pnum
10837
10905
\effects
10847
10915
span<const byte, Extent == dynamic_extent ? dynamic_extent : sizeof(ElementType) * Extent>
10848
10916
as_bytes(span<ElementType, Extent> s) noexcept;
10849
10917
\end {itemdecl }
10918
+
10850
10919
\begin {itemdescr }
10851
10920
\pnum
10852
10921
\effects
10859
10928
span<byte, Extent == dynamic_extent ? dynamic_extent : sizeof(ElementType) * Extent>
10860
10929
as_writable_bytes(span<ElementType, Extent> s) noexcept;
10861
10930
\end {itemdecl }
10931
+
10862
10932
\begin {itemdescr }
10863
10933
\pnum
10864
10934
\constraints
10868
10938
\effects
10869
10939
Equivalent to: \tcode {return \{ reinterpret_cast<byte*>(s.data()), s.size_bytes()\} ;}
10870
10940
\end {itemdescr }
10941
+
10942
+ \rSec 3[span.tuple]{Tuple interface}
10943
+
10944
+ \indexlibrary {\idxcode {tuple_size}}%
10945
+ \begin {itemdecl }
10946
+ template<class ElementType, size_t Extent>
10947
+ struct tuple_size<span<ElementType, Extent>>
10948
+ : integral_constant<size_t, Extent> { };
10949
+ \end {itemdecl }
10950
+
10951
+ \indexlibrary {\idxcode {tuple_element}}%
10952
+ \begin {itemdecl }
10953
+ tuple_element<I, span<ElementType, Extent>>::type
10954
+ \end {itemdecl }
10955
+
10956
+ \begin {itemdescr }
10957
+ \pnum
10958
+ \mandates
10959
+ \tcode {Extent != dynamic_extent \&\& I < Extent} is \tcode {true}.
10960
+
10961
+ \pnum
10962
+ \cvalue
10963
+ The type \tcode {ElementType}.
10964
+ \end {itemdescr }
10965
+
10966
+ \indexlibrary {\idxcode {get}}%
10967
+ \begin {itemdecl }
10968
+ template<size_t I, class ElementType, size_t Extent>
10969
+ constexpr ElementType& get(span<ElementType, Extent> s) noexcept;
10970
+ \end {itemdecl }
10971
+
10972
+ \begin {itemdescr }
10973
+ \pnum
10974
+ \mandates
10975
+ \tcode {Extent != dynamic_extent \&\& I < Extent} is \tcode {true}.
10976
+
10977
+ \pnum
10978
+ \returns
10979
+ A reference to the $ \tcode {I}^\text {th}$ element of \tcode {s},
10980
+ where indexing is zero-based.
10981
+ \end {itemdescr }
0 commit comments