|
6336 | 6336 | In the case that \tcode{N == 0}, \tcode{begin() == end() ==} unique value. |
6337 | 6337 | The return value of \tcode{data()} is unspecified. |
6338 | 6338 |
|
6339 | | -\pnum |
6340 | | -The effect of calling \tcode{front()} or \tcode{back()} for a zero-sized array is |
6341 | | -undefined. |
6342 | | - |
6343 | 6339 | \pnum |
6344 | 6340 | Member function \tcode{swap()} shall have a |
6345 | 6341 | non-throwing exception specification. |
|
8976 | 8972 | Equivalent to: |
8977 | 8973 | \begin{codeblock} |
8978 | 8974 | auto original_size = c.size(); |
8979 | | -for (auto i = c.begin(), last = c.end(); i != last; ) { |
| 8975 | +for (auto i = c.begin(); i != c.end(); ) { |
8980 | 8976 | if (pred(*i)) { |
8981 | 8977 | i = c.erase(i); |
8982 | 8978 | } else { |
|
11573 | 11569 | const Allocator& = Allocator()); |
11574 | 11570 | constexpr map(const map& x); |
11575 | 11571 | constexpr map(map&& x); |
11576 | | - explicit map(const Allocator&); |
| 11572 | + constexpr explicit map(const Allocator&); |
11577 | 11573 | constexpr map(const map&, const type_identity_t<Allocator>&); |
11578 | 11574 | constexpr map(map&&, const type_identity_t<Allocator>&); |
11579 | 11575 | constexpr map(initializer_list<value_type>, const Compare& = Compare(), |
|
13450 | 13446 | is additional semantic information. |
13451 | 13447 |
|
13452 | 13448 | \pnum |
13453 | | -The types \tcode{iterator} and \tcode{const_iterator} meet |
| 13449 | +The types \tcode{iterator}, \tcode{const_iterator}, |
| 13450 | +\tcode{local_iterator}, and \tcode{const_local_iterator} meet |
13454 | 13451 | the constexpr iterator requirements\iref{iterator.requirements.general}. |
13455 | 13452 |
|
13456 | 13453 | \indexlibraryglobal{unordered_map}% |
|
14245 | 14242 | there is additional semantic information. |
14246 | 14243 |
|
14247 | 14244 | \pnum |
14248 | | -The types \tcode{iterator} and \tcode{const_iterator} meet |
| 14245 | +The types \tcode{iterator}, \tcode{const_iterator}, |
| 14246 | +\tcode{local_iterator}, and \tcode{const_local_iterator} meet |
14249 | 14247 | the constexpr iterator requirements\iref{iterator.requirements.general}. |
14250 | 14248 |
|
14251 | 14249 | \indexlibraryglobal{unordered_multimap}% |
|
14735 | 14733 | is additional semantic information. |
14736 | 14734 |
|
14737 | 14735 | \pnum |
14738 | | -The types \tcode{iterator} and \tcode{const_iterator} meet |
| 14736 | +The types \tcode{iterator}, \tcode{const_iterator}, |
| 14737 | +\tcode{local_iterator}, and \tcode{const_local_iterator} meet |
14739 | 14738 | the constexpr iterator requirements\iref{iterator.requirements.general}. |
14740 | 14739 |
|
14741 | 14740 | \indexlibraryglobal{unordered_set}% |
|
15155 | 15154 | is additional semantic information. |
15156 | 15155 |
|
15157 | 15156 | \pnum |
15158 | | -The types \tcode{iterator} and \tcode{const_iterator} meet |
| 15157 | +The types \tcode{iterator}, \tcode{const_iterator}, |
| 15158 | +\tcode{local_iterator}, and \tcode{const_local_iterator} meet |
15159 | 15159 | the constexpr iterator requirements\iref{iterator.requirements.general}. |
15160 | 15160 |
|
15161 | 15161 | \indexlibraryglobal{unordered_multiset}% |
|
15628 | 15628 | template<class charT, class T, @\libconcept{formattable}@<charT> Container> |
15629 | 15629 | struct formatter<queue<T, Container>, charT>; |
15630 | 15630 |
|
| 15631 | + template<class T, class Container> |
| 15632 | + constexpr bool enable_nonlocking_formatter_optimization<queue<T, Container>> = false; |
| 15633 | + |
15631 | 15634 | // \ref{priority.queue}, class template \tcode{priority_queue} |
15632 | 15635 | template<class T, class Container = vector<T>, |
15633 | 15636 | class Compare = less<typename Container::value_type>> |
|
15642 | 15645 | // \ref{container.adaptors.format}, formatter specialization for \tcode{priority_queue} |
15643 | 15646 | template<class charT, class T, @\libconcept{formattable}@<charT> Container, class Compare> |
15644 | 15647 | struct formatter<priority_queue<T, Container, Compare>, charT>; |
| 15648 | + |
| 15649 | + template<class T, class Container, class Compare> |
| 15650 | + constexpr bool |
| 15651 | + enable_nonlocking_formatter_optimization<priority_queue<T, Container, Compare>> = false; |
15645 | 15652 | } |
15646 | 15653 | \end{codeblock} |
15647 | 15654 |
|
|
16553 | 16560 | // \ref{container.adaptors.format}, formatter specialization for \tcode{stack} |
16554 | 16561 | template<class charT, class T, @\libconcept{formattable}@<charT> Container> |
16555 | 16562 | struct formatter<stack<T, Container>, charT>; |
| 16563 | + |
| 16564 | + template<class T, class Container> |
| 16565 | + constexpr bool enable_nonlocking_formatter_optimization<stack<T, Container>> = false; |
16556 | 16566 | } |
16557 | 16567 | \end{codeblock} |
16558 | 16568 |
|
|
19041 | 19051 | constexpr container_type extract() &&; |
19042 | 19052 | constexpr void replace(container_type&&); |
19043 | 19053 |
|
19044 | | - constexpr iterator erase(iterator position); |
| 19054 | + constexpr iterator erase(iterator position) requires (!@\libconcept{same_as}@<iterator, const_iterator>); |
19045 | 19055 | constexpr iterator erase(const_iterator position); |
19046 | 19056 | constexpr size_type erase(const key_type& x); |
19047 | 19057 | template<class K> constexpr size_type erase(K&& x); |
|
19712 | 19722 | constexpr container_type extract() &&; |
19713 | 19723 | constexpr void replace(container_type&&); |
19714 | 19724 |
|
19715 | | - constexpr iterator erase(iterator position); |
| 19725 | + constexpr iterator erase(iterator position) requires (!@\libconcept{same_as}@<iterator, const_iterator>); |
19716 | 19726 | constexpr iterator erase(const_iterator position); |
19717 | 19727 | constexpr size_type erase(const key_type& x); |
19718 | 19728 | template<class K> constexpr size_type erase(K&& x); |
|
20161 | 20171 | The header \libheaderref{mdspan} defines the class template \tcode{mdspan} and |
20162 | 20172 | other facilities for interacting with these multidimensional views. |
20163 | 20173 |
|
| 20174 | +\pnum |
| 20175 | +In addition to being available via inclusion of the \libheaderref{span} header, |
| 20176 | +\tcode{dynamic_extent} is available when the header \libheaderref{mdspan} is included. |
| 20177 | + |
20164 | 20178 | \rSec2[views.contiguous]{Contiguous access} |
20165 | 20179 |
|
20166 | 20180 | \rSec3[span.syn]{Header \tcode{<span>} synopsis}% |
|
20177 | 20191 | template<class T> |
20178 | 20192 | concept @\defexposconcept{integral-constant-like}@ = // \expos |
20179 | 20193 | is_integral_v<remove_cvref_t<decltype(T::value)>> && |
20180 | | - !is_same_v<bool, remove_const_t<decltype(T::value)>> && |
| 20194 | + !is_same_v<bool, remove_cvref_t<decltype(T::value)>> && |
20181 | 20195 | @\libconcept{convertible_to}@<T, decltype(T::value)> && |
20182 | 20196 | @\libconcept{equality_comparable_with}@<T, decltype(T::value)> && |
20183 | 20197 | bool_constant<T() == T::value>::value && |
|
20644 | 20658 |
|
20645 | 20659 | \pnum |
20646 | 20660 | \effects |
20647 | | -Equivalent to: \tcode{return R\{data(), Count\};} |
| 20661 | +Equivalent to: \tcode{return R(data(), Count);} |
20648 | 20662 | where \tcode{R} is the return type. |
20649 | 20663 | \end{itemdescr} |
20650 | 20664 |
|
|
20664 | 20678 |
|
20665 | 20679 | \pnum |
20666 | 20680 | \effects |
20667 | | -Equivalent to: \tcode{return R\{data() + (size() - Count), Count\};} |
| 20681 | +Equivalent to: \tcode{return R(data() + (size() - Count), Count);} |
20668 | 20682 | where \tcode{R} is the return type. |
20669 | 20683 | \end{itemdescr} |
20670 | 20684 |
|
|
20719 | 20733 |
|
20720 | 20734 | \pnum |
20721 | 20735 | \effects |
20722 | | -Equivalent to: \tcode{return \{data(), count\};} |
| 20736 | +Equivalent to: \tcode{return R(data(), count);} |
| 20737 | +where \tcode{R} is the return type. |
20723 | 20738 | \end{itemdescr} |
20724 | 20739 |
|
20725 | 20740 | \indexlibrarymember{span}{last}% |
|
20734 | 20749 |
|
20735 | 20750 | \pnum |
20736 | 20751 | \effects |
20737 | | -Equivalent to: \tcode{return \{data() + (size() - count), count\};} |
| 20752 | +Equivalent to: \tcode{return R(data() + (size() - count), count);} |
| 20753 | +where \tcode{R} is the return type. |
20738 | 20754 | \end{itemdescr} |
20739 | 20755 |
|
20740 | 20756 | \indexlibrarymember{span}{subspan}% |
|
20755 | 20771 | \effects |
20756 | 20772 | Equivalent to: |
20757 | 20773 | \begin{codeblock} |
20758 | | -return {data() + offset, count == dynamic_extent ? size() - offset : count}; |
| 20774 | +return R(data() + offset, count == dynamic_extent ? size() - offset : count); |
20759 | 20775 | \end{codeblock} |
| 20776 | +where \tcode{R} is the return type. |
20760 | 20777 | \end{itemdescr} |
20761 | 20778 |
|
20762 | 20779 | \rSec4[span.obs]{Observers} |
|
20959 | 20976 | \end{itemdecl} |
20960 | 20977 |
|
20961 | 20978 | \begin{itemdescr} |
| 20979 | +\pnum |
| 20980 | +\constraints |
| 20981 | +\tcode{is_volatile_v<ElementType>} is \tcode{false}. |
| 20982 | + |
20962 | 20983 | \pnum |
20963 | 20984 | \effects |
20964 | 20985 | Equivalent to: \tcode{return R\{reinterpret_cast<const byte*>(s.data()), s.size_bytes()\};} |
|
20975 | 20996 | \begin{itemdescr} |
20976 | 20997 | \pnum |
20977 | 20998 | \constraints |
20978 | | -\tcode{is_const_v<ElementType>} is \tcode{false}. |
| 20999 | +\tcode{is_const_v<ElementType>} is \tcode{false} and |
| 21000 | +\tcode{is_volatile_v<ElementType>} is \tcode{false}. |
20979 | 21001 |
|
20980 | 21002 | \pnum |
20981 | 21003 | \effects |
|
21246 | 21268 | \effects |
21247 | 21269 | \begin{itemize} |
21248 | 21270 | \item |
21249 | | -If \tcode{OtherIndexType} is an integral type other than \tcode{bool}, |
| 21271 | +If \tcode{remove_cvref_t<OtherIndexType>} is an integral type other than \tcode{bool}, |
21250 | 21272 | then equivalent to \tcode{return i;}, |
21251 | 21273 | \item |
21252 | 21274 | otherwise, equivalent to \tcode{return static_cast<index_type>(i);}. |
|
22600 | 22622 | constexpr index_type operator()(Indices...) const noexcept; |
22601 | 22623 |
|
22602 | 22624 | static constexpr bool is_always_unique() noexcept { return true; } |
22603 | | - static constexpr bool is_always_exhaustive() noexcept { return false; } |
| 22625 | + static constexpr bool is_always_exhaustive() noexcept; |
22604 | 22626 | static constexpr bool is_always_strided() noexcept { return true; } |
22605 | 22627 |
|
22606 | 22628 | static constexpr bool is_unique() noexcept { return true; } |
|
22883 | 22905 | \end{codeblock} |
22884 | 22906 | \end{itemdescr} |
22885 | 22907 |
|
| 22908 | +\indexlibrarymember{is_always_exhaustive}{layout_stride::mapping}% |
| 22909 | +\begin{itemdecl} |
| 22910 | +static constexpr bool is_always_exhaustive() noexcept; |
| 22911 | +\end{itemdecl} |
| 22912 | + |
| 22913 | +\begin{itemdescr} |
| 22914 | +\pnum |
| 22915 | +\returns |
| 22916 | +\tcode{true} if \exposid{rank_} is 0 |
| 22917 | +or if there is a rank index \tcode{r} of \tcode{extents()} |
| 22918 | +such that \tcode{extents_type::sta\-tic_extent(r)} is 0, |
| 22919 | +otherwise \tcode{false}. |
| 22920 | +\end{itemdescr} |
| 22921 | + |
22886 | 22922 | \indexlibrarymember{is_exhaustive}{layout_stride::mapping}% |
22887 | 22923 | \begin{itemdecl} |
22888 | 22924 | constexpr bool is_exhaustive() const noexcept; |
|
22893 | 22929 | \returns |
22894 | 22930 | \begin{itemize} |
22895 | 22931 | \item |
22896 | | -\tcode{true} if \exposid{rank_} is 0. |
| 22932 | +\tcode{true} if \exposid{rank_} or the size of the multidimensional index space |
| 22933 | +\tcode{m.extents()} is 0. |
22897 | 22934 | \item |
22898 | 22935 | Otherwise, \tcode{true} if there is |
22899 | 22936 | a permutation $P$ of the integers in the range $[0, \exposid{rank_})$ |
|
23058 | 23095 | then the size of the multidimensional index space \tcode{Extents()} |
23059 | 23096 | is representable as a value of type \tcode{index_type}. |
23060 | 23097 | \item |
| 23098 | +If \tcode{padding_value} is not equal to \tcode{dynamic_extent}, then |
23061 | 23099 | \tcode{padding_value} is representable as a value of type \tcode{index_type}. |
23062 | 23100 | \item |
23063 | 23101 | If |
|
23684 | 23722 | then the size of the multidimensional index space \tcode{Extents()} |
23685 | 23723 | is representable as a value of type \tcode{index_type}. |
23686 | 23724 | \item |
| 23725 | +If \tcode{padding_value} is not equal to \tcode{dynamic_extent}, then |
23687 | 23726 | \tcode{padding_value} is representable as a value of type \tcode{index_type}. |
23688 | 23727 | \item |
23689 | 23728 | If |
|
0 commit comments