Skip to content

P2450 C++ Standard Library Issues to be moved in Virtual Plenary, Oct. 2021 #5027

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 41 commits into from
Oct 18, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
9a8c274
LWG2191 Incorrect specification of match_results(match_results&&)
jensmaurer Oct 13, 2021
8f7e799
LWG2381 Inconsistency in parsing floating point numbers
jensmaurer Oct 13, 2021
4ba323a
LWG2762 unique_ptr operator*() should be noexcept
jensmaurer Oct 13, 2021
11889ea
LWG3121 tuple constructor constraints for UTypes&&... overloads
jensmaurer Oct 13, 2021
a63caa3
LWG3123 duration constructor from representation shouldn't be effecti…
jensmaurer Oct 13, 2021
0ecb6bf
LWG3146 Excessive unwrapping in std::ref/cref
jensmaurer Oct 13, 2021
3305d6b
LWG3152 common_type and common_reference have flaws in common
jensmaurer Oct 13, 2021
83375c3
LWG3293 move_iterator operator+() has incorrect constraints
jensmaurer Oct 13, 2021
2673e29
LWG3361 safe_range<SomeRange&> case
jensmaurer Oct 13, 2021
318d73f
LWG3392 ranges::distance() cannot be used on a move-only iterator wit…
jensmaurer Oct 13, 2021
5301715
LWG3407 Some problems with the wording changes of P1739R4
jensmaurer Oct 13, 2021
2381008
LWG3422 Issues of seed_seq's constructors
jensmaurer Oct 14, 2021
49a1d88
LWG3470 convertible-to-non-slicing seems to reject valid case
jensmaurer Oct 14, 2021
4189fff
LWG3480 directory_iterator and recursive_directory_iterator are not C…
jensmaurer Oct 14, 2021
0636bba
LWG3498 Inconsistent noexcept-specifiers for basic_syncbuf
jensmaurer Oct 14, 2021
7441112
LWG3535 join_view::iterator::iterator_category and ::iterator_concept…
jensmaurer Oct 14, 2021
d5ad24f
LWG3554 chrono::parse needs const charT* and basic_string_view<charT>…
jensmaurer Oct 14, 2021
c55739d
LWG3557 The static_cast expression in convertible_to has the wrong op…
jensmaurer Oct 14, 2021
0de6ef9
LWG3559 Semantic requirements of sized_range is circular
jensmaurer Oct 14, 2021
16d32b7
LWG3560 ranges::equal and ranges::is_permutation should short-circuit…
jensmaurer Oct 14, 2021
3c71c28
LWG3561 Issue with internal counter in discard_block_engine
jensmaurer Oct 14, 2021
aa550a5
LWG3563 keys_view example is broken
jensmaurer Oct 14, 2021
28bddb0
LWG3566 Constraint recursion for operator<=>(optional<T>, U)
jensmaurer Oct 14, 2021
acec76d
LWG3567 Formatting move-only iterators take two
jensmaurer Oct 14, 2021
00f0f12
LWG3568 basic_istream_view needs to initialize value_
jensmaurer Oct 14, 2021
8d003d0
LWG3570 basic_osyncstream::emit should be an unformatted output function
jensmaurer Oct 14, 2021
af17c9c
LWG3571 flush_emit should set badbit if the emit call fails
jensmaurer Oct 14, 2021
fd3c4d0
LWG3572 copyable-box should be fully constexpr
jensmaurer Oct 14, 2021
f4b7010
LWG3573 Missing Throws element for basic_string_view(It begin, End end)
jensmaurer Oct 14, 2021
4087178
LWG3574 common_iterator should be completely constexpr-able
jensmaurer Oct 14, 2021
ba2685a
LWG3580 iota_view's iterator's binary operator+ should be improved
jensmaurer Oct 14, 2021
baa3ded
LWG3581 The range constructor makes basic_string_view not trivially m…
jensmaurer Oct 14, 2021
190eb2c
LWG3585 Variant converting assignment with immovable alternative
jensmaurer Oct 14, 2021
9d1ebed
LWG3589 The const lvalue reference overload of get for subrange does …
jensmaurer Oct 14, 2021
7ab5450
LWG3590 split_view::base() const & is overconstrained
jensmaurer Oct 14, 2021
4612189
LWG3591 lazy_split_view<input_view>::inner-iterator::base() && invali…
jensmaurer Oct 14, 2021
d5ce7d3
LWG3592 lazy_split_view needs to check the simpleness of Pattern
jensmaurer Oct 14, 2021
661e086
LWG3593 Several iterators' base() const & and lazy_split_view::outer-…
jensmaurer Oct 14, 2021
de05348
LWG3595 Exposition-only classes proxy and postfix-proxy for common_it…
jensmaurer Oct 14, 2021
e0f11a3
[range.take.overview] Avoid highlighting single evaluation of "F"
jensmaurer Oct 15, 2021
8753efa
[syncstream.syncbuf.special] Remove 'noexcept' for non-member swap
jensmaurer Oct 15, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 20 additions & 5 deletions source/algorithms.tex
Original file line number Diff line number Diff line change
Expand Up @@ -3939,17 +3939,24 @@

\pnum
\complexity
If the types of \tcode{first1}, \tcode{last1}, \tcode{first2}, and \tcode{last2}:
If
\begin{itemize}
\item
the types of \tcode{first1}, \tcode{last1}, \tcode{first2}, and \tcode{last2}
meet the
\oldconcept{RandomAccessIterator} requirements\iref{random.access.iterators}
and \tcode{last1 - first1 != last2 - first2}
for the overloads in namespace \tcode{std};
\item
pairwise model \libconcept{sized_sentinel_for}\iref{iterator.concept.sizedsentinel}
for the overloads in namespace \tcode{ranges},
the types of \tcode{first1}, \tcode{last1}, \tcode{first2}, and \tcode{last2}
pairwise model \libconcept{sized_sentinel_for}\iref{iterator.concept.sizedsentinel}
and \tcode{last1 - first1 != last2 - first2}
for the first overload in namespace \tcode{ranges},
\item
\tcode{R1} and \tcode{R2} each model \libconcept{sized_range} and
\tcode{ranges::distance(r1) != ranges::distance(r2)}
for the second overload in namespace \tcode{ranges},
\end{itemize}
and \tcode{last1 - first1 != last2 - first2},
then no applications of the corresponding predicate and each projection;
otherwise,
\begin{itemize}
Expand Down Expand Up @@ -4054,9 +4061,17 @@
\complexity
No applications of the corresponding predicate and projections if:
\begin{itemize}
\item
for the first overload,
\begin{itemize}
\item \tcode{S1} and \tcode{I1} model \tcode{\libconcept{sized_sentinel_for}<S1, I1>},
\item \tcode{S2} and \tcode{I2} model \tcode{\libconcept{sized_sentinel_for}<S2, I2>}, and
\item \tcode{last1 - first1 != last2 - first2}.
\item \tcode{last1 - first1 != last2 - first2};
\end{itemize}
\item
for the second overload,
\tcode{R1} and \tcode{R2} each model \libconcept{sized_range}, and
\tcode{ranges::distance(r1) != ranges::distance(r2)}.
\end{itemize}
Otherwise, exactly \tcode{last1 - first1} applications
of the corresponding predicate and projections
Expand Down
10 changes: 10 additions & 0 deletions source/compatibility.tex
Original file line number Diff line number Diff line change
Expand Up @@ -1773,6 +1773,16 @@
binary representation of the required template specializations of
\tcode{std::complex} may not be compatible with this revision of \Cpp{}.

\rSec2[diff.cpp03.locale]{\ref{localization}: localization library}

\diffref{facet.num.get.virtuals}
\change
The \tcode{num_get} facet recognizes hexadecimal floating point values.
\rationale
Required by new feature.
\effect
Valid \CppIII{} code may have different behavior in this revision of \Cpp{}.

\rSec2[diff.cpp03.input.output]{\ref{input.output}: input/output library}

\diffref{istream.sentry,ostream.sentry,iostate.flags}
Expand Down
4 changes: 2 additions & 2 deletions source/concepts.tex
Original file line number Diff line number Diff line change
Expand Up @@ -346,8 +346,8 @@
template<class From, class To>
concept @\deflibconcept{convertible_to}@ =
is_convertible_v<From, To> &&
requires(add_rvalue_reference_t<From> (&f)()) {
static_cast<To>(f());
requires {
static_cast<To>(declval<From>());
};
\end{itemdecl}

Expand Down
34 changes: 25 additions & 9 deletions source/iostreams.tex
Original file line number Diff line number Diff line change
Expand Up @@ -6892,7 +6892,10 @@
Then, if \tcode{os.rdbuf()} is a
\tcode{basic_syncbuf<charT, traits, Allocator>*},
called \tcode{buf} for the purpose of exposition,
calls \tcode{buf->emit()}.
behaves as an unformatted output function\iref{ostream.unformatted}
of \tcode{os}.
After constructing a \tcode{sentry} object, calls \tcode{buf->emit()}.
If that call returns \tcode{false}, calls \tcode{os.setstate(ios_base::badbit)}.

\pnum
\returns
Expand Down Expand Up @@ -11913,7 +11916,7 @@

\indexlibrarymember{operator=}{basic_syncbuf}%
\begin{itemdecl}
basic_syncbuf& operator=(basic_syncbuf&& rhs) noexcept;
basic_syncbuf& operator=(basic_syncbuf&& rhs);
\end{itemdecl}

\begin{itemdescr}
Expand Down Expand Up @@ -11951,7 +11954,7 @@

\indexlibrarymember{swap}{basic_syncbuf}%
\begin{itemdecl}
void swap(basic_syncbuf& other) noexcept;
void swap(basic_syncbuf& other);
\end{itemdecl}

\begin{itemdescr}
Expand Down Expand Up @@ -12079,7 +12082,7 @@
\begin{itemdecl}
template<class charT, class traits, class Allocator>
void swap(basic_syncbuf<charT, traits, Allocator>& a,
basic_syncbuf<charT, traits, Allocator>& b) noexcept;
basic_syncbuf<charT, traits, Allocator>& b);
\end{itemdecl}

\begin{itemdescr}
Expand Down Expand Up @@ -12215,7 +12218,8 @@
\begin{itemdescr}
\pnum
\effects
Calls \tcode{sb.emit()}.
Behaves as an unformatted output function\iref{ostream.unformatted}.
After constructing a sentry object, calls \tcode{sb.emit()}.
If that call returns \tcode{false},
calls \tcode{setstate(ios_base::badbit)}.

Expand Down Expand Up @@ -12468,14 +12472,14 @@

// \ref{fs.dir.itr.nonmembers}, range access for directory iterators
directory_iterator begin(directory_iterator iter) noexcept;
directory_iterator end(const directory_iterator&) noexcept;
directory_iterator end(directory_iterator) noexcept;

// \ref{fs.class.rec.dir.itr}, recursive directory iterators
class recursive_directory_iterator;

// \ref{fs.rec.dir.itr.nonmembers}, range access for recursive directory iterators
recursive_directory_iterator begin(recursive_directory_iterator iter) noexcept;
recursive_directory_iterator end(const recursive_directory_iterator&) noexcept;
recursive_directory_iterator end(recursive_directory_iterator) noexcept;

// \ref{fs.class.file.status}, file status
class file_status;
Expand Down Expand Up @@ -12645,6 +12649,18 @@
path weakly_canonical(const path& p);
path weakly_canonical(const path& p, error_code& ec);
}

namespace std::ranges {
template<>
inline constexpr bool enable_borrowed_range<filesystem::directory_iterator> = true;
template<>
inline constexpr bool enable_borrowed_range<filesystem::recursive_directory_iterator> = true;

template<>
inline constexpr bool enable_view<filesystem::directory_iterator> = true;
template<>
inline constexpr bool enable_view<filesystem::recursive_directory_iterator> = true;
}
\end{codeblock}

\pnum
Expand Down Expand Up @@ -15774,7 +15790,7 @@

\indexlibrarymember{end}{directory_iterator}%
\begin{itemdecl}
directory_iterator end(const directory_iterator&) noexcept;
directory_iterator end(directory_iterator) noexcept;
\end{itemdecl}

\begin{itemdescr}
Expand Down Expand Up @@ -16145,7 +16161,7 @@

\indexlibrarymember{end}{recursive_directory_iterator}%
\begin{itemdecl}
recursive_directory_iterator end(const recursive_directory_iterator&) noexcept;
recursive_directory_iterator end(recursive_directory_iterator) noexcept;
\end{itemdecl}

\begin{itemdescr}
Expand Down
Loading