You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
At the February 2023 meeting, the following LWG issues were resolved in the C++ Working Paper.
❔ Not yet analyzed
Remaining issues:
❌ Not applicable
If an issue requires no action from implementers, we mark it as N/A. Categories:
Pure wording clarifications with nothing to implement (these can be changes to non-normative text like examples and informative notes, or wording cleanups to normative text that don't impact observable behavior)
LWG-3441 Misleading note about calls to customization points
There's nothing to do here.
LWG-3827 Deprecate <stdalign.h> and <stdbool.h> macros
There's nothing for us to do here. These <meow.h> headers aren't part of the repo. Our <cstdalign> does define __alignas_is_defined and our <cstdbool> gets __bool_true_false_are_defined from <stdbool.h>, but the <cmeow> wrappers are already deprecated in C++17 mode (we didn't bother to implement removal in C++20 mode) and it's unclear how the UCRT could emit deprecation warnings for these macros. This isn't worth spending more time on, given that deprecation warnings aren't required for conformance (and we already go quite far here).
Something that increases the restrictions placed on users, but implementers aren't expected to enforce those restrictions
LWG-3622 Misspecified transitivity of equivalence in [unord.req.general]
This is N/A because it increases restrictions on users without requiring implementers to enforce them.
LWG-3645resize_and_overwrite is overspecified to call its callback with lvalues
There's nothing for implementers to do here (it merely increases the restrictions for users).
Fixes for obviously broken wording, where implementers would have done the right thing anyways
LWG-3032ValueSwappable requirement missing for push_heap and make_heap
LWG-3756 Is the std::atomic_flag class signal-safe?
LWG-3841<version> should not be "all freestanding"
LWG-3843std::expected<T, E>::value() & assumes E is copy constructible
This is "naturally enforced" (as we attempt to copy) and the error messages should be sufficiently clear.
😸 Already implemented
Sometimes we cite LWG issues in product code comments as we're implementing their proposed resolutions. When the resolutions are officially accepted, we should remove the citations (as the default assumption is that we're implementing what the Standard says). If something is especially subtle, we can convert the citation to mention the relevant Standard section. Sometimes we should add test coverage - e.g. when the Standard begins requiring something that we were already doing, but weren't explicitly testing for.
Already implemented, comments need to be removed and messages need to cite the Standard
if constexpr (_Is_specialization_v<_Ty, duration>) {
if constexpr (!treat_as_floating_point_v<typename _Ty::rep>) {
if (_Specs._Precision != -1) {
_THROW(format_error("Precision specification invalid for chrono::duration type with "
"integral representation type, see N4885 [time.format]/1."));
}
}
} else {
if (_Specs._Precision != -1) {
_THROW(format_error("Precision specification invalid for non-chrono::duration type, "
"see N4885 [time.format]/1."));
}
}
We go beyond the Standard by using treat_as_floating_point_v. I think this is a remaining (small) defect in the Standardese.
When a new Working Paper is available, we could update the Standardese citation, but this is not absolutely necessary (as the stable name and paragraph number are unchanged, and the content of the paragraph hasn't changed that much).
LWG-3866 Bad Mandates for expected::transform_error overloads
We should record this LWG issue in the GitHub issue tracking the feature. That way, we'll remember to verify it, but it doesn't represent net new work.
(Previous meta-issue: #3214)
At the February 2023 meeting, the following LWG issues were resolved in the C++ Working Paper.
❔ Not yet analyzed
❌ Not applicable
If an issue requires no action from implementers, we mark it as N/A. Categories:
<stdalign.h>
and<stdbool.h>
macros<meow.h>
headers aren't part of the repo. Our<cstdalign>
does define__alignas_is_defined
and our<cstdbool>
gets__bool_true_false_are_defined
from<stdbool.h>
, but the<cmeow>
wrappers are already deprecated in C++17 mode (we didn't bother to implement removal in C++20 mode) and it's unclear how the UCRT could emit deprecation warnings for these macros. This isn't worth spending more time on, given that deprecation warnings aren't required for conformance (and we already go quite far here).intmax_t
anduintmax_t
with C2xterminate
resize_and_overwrite
is overspecified to call its callback with lvaluesValueSwappable
requirement missing forpush_heap
andmake_heap
std::atomic_flag
class signal-safe?<version>
should not be "all freestanding"std::expected<T, E>::value() &
assumesE
is copy constructible😸 Already implemented
Sometimes we cite LWG issues in product code comments as we're implementing their proposed resolutions. When the resolutions are officially accepted, we should remove the citations (as the default assumption is that we're implementing what the Standard says). If something is especially subtle, we can convert the citation to mention the relevant Standard section. Sometimes we should add test coverage - e.g. when the Standard begins requiring something that we were already doing, but weren't explicitly testing for.
char_traits::copy
precondition too weakstd::ranges::distance(a, a + 3)
priority_queue::push_range
needs toappend_range
deque::prepend_range
needs to permuteranges::find_last
should be renamedbasic_string_view
should allow explicit conversion when only traits varystd::basic_osyncstream
's move assignment operator benoexcept
?views::as_const
onref_view<T>
should returnref_view<const T>
views::as_const
#3234.id
check inbasic_format_parse_context::next_arg_id
STL/stl/inc/chrono
Lines 5301 to 5313 in 9ae1b3f
treat_as_floating_point_v
. I think this is a remaining (small) defect in the Standardese.expected::transform_error
overloads🩹 Patches an unimplemented feature
We should record this LWG issue in the GitHub issue tracking the feature. That way, we'll remember to verify it, but it doesn't represent net new work.
constexpr
For<cmath>
And<cstdlib>
#2530:constexpr
forstd::intmax_t
math functions in<cinttypes>
reference_
meow
s_from_temporary
should not useis_
meow
ible
<mdspan>
#2909:std::layout_
meow
::mapping
misses precondition<flat_map>
#2910 and P1222R4<flat_set>
#2912:Allocator
to be usefulflat_
meow
constructors takingKeyContainer
lackKeyCompare
parameter<flat_set>
#2912:erase_if
forflat_{,multi}set
is incorrectly specifiedrange_formatter
'sset_separator
,set_brackets
, andunderlying
functions should benoexcept
std::string
views::cartesian_product
#2923:cartesian_product_view::
iterator
::
prev
is not quite rightcartesian_product_view::
iterator
's default constructor is overconstrainednexttoward
's signature🐞 Not yet implemented
match_results
match_results
#3411.Facet
is anullptr
Facet
is anullptr
#3463.sub_match::swap
only swaps the base classsub_match::swap
only swaps the base class #3412.basic_format_arg(T&&)
should useremove_cvref_t<T>
throughoutbasic_format_arg(T&&)
should useremove_cvref_t<T>
throughout #3460 and noted in P2286R8 Formatting Ranges #2919 (we implement some but not all of the machinery this issue touches).INVOKE
operation andunion
typesINVOKE
operation andunion
types #3424.ranges::to
misusescpp17-input-iterator
ranges::to
misusescpp17-input-iterator
#3422.inout_ptr
andout_ptr
for empty caseinout_ptr
andout_ptr
for empty case #3413.basic_const_iterator::operator==
causes infinite constraint recursionbasic_const_iterator::operator==
causes infinite constraint recursion #3458.uses_allocator_construction_args
should have overload forpair-like
uses_allocator_construction_args
should have overload forpair-like
#3415. Should wait for Implement LWG-3677 Is a cv-qualifiedpair
specially handled in uses-allocator construction? #3396 to be merged.template<size_t N> struct formatter<const charT[N], charT>
template<size_t N> struct formatter<const charT[N], charT>
#3426.std::expected<bool, E1>
conversion constructorexpected(const expected<U, G>&)
should take precedence overexpected(U&&)
withoperator bool
std::expected<bool, E1>
conversion constructorexpected(const expected<U, G>&)
should take precedence overexpected(U&&)
withoperator bool
#3433.ranges::to
can still return viewsranges::to
can still return views #3417.chunk_view::
inner-iterator
missing customiter_move
anditer_swap
chunk_view::inner-iterator
missing customiter_move
anditer_swap
#3432.basic_const_iterator<volatile int*>::operator->
is ill-formedbasic_const_iterator<volatile int*>::operator->
is ill-formed #3427.range_common_reference_t
is missingrange_common_reference_t
is missing #3416.basic_const_iterator
'scommon_type
specialization is underconstrainedbasic_const_iterator
'scommon_type
specialization is underconstrained #3428.pair
spair
s #3419.std::errc
constants related to UNIX STREAMSstd::errc
constants related to UNIX STREAMS #3420.voidify
voidify
#3431.basic_const_iterator
should have customiter_move
basic_const_iterator
should have customiter_move
#3429.std::ranges::repeat_view<T, IntegerClass>::
iterator
may be ill-formedstd::ranges::repeat_view<T, IntegerClass>::iterator
may be ill-formed #3430.const
-qualified monadic overloads forstd::expected
const
-qualified monadic overloads forstd::expected
#3435.import std;
should guarantee initialization of standard iostreams objectsimport std;
should guarantee initialization of standard iostreams objects #3436.operator+=
complexity for{chunk,stride}_view::
iterator
operator+=
complexity for{chunk,stride}_view::iterator
#3434.repeat_view
's piecewise constructor is missing preconditions_STL_VERIFY
check.std::basic_format_args
std::basic_format_args
#3414.basic_format_args
#3421.adjacent_view
,adjacent_transform_view
, andslide_view
missingbase
accessoradjacent_view
,adjacent_transform_view
, andslide_view
missingbase
accessor #3409.slide_view
missingbase
accessor #3410.zip
#2252.views::as_const
onempty_view<T>
should returnempty_view<const T>
views::as_const
onempty_view<T>
should returnempty_view<const T>
#3418.views::as_const
onempty_view<T>
should returnempty_view<const T>
#3423.The text was updated successfully, but these errors were encountered: