This is an archive of the discontinued LLVM Phabricator instance.

[libc++] Fix LWG3146 "Excessive unwrapping in std::ref/cref"
ClosedPublic

Authored by Quuxplusone on Jan 22 2022, 9:20 AM.

Details

Summary

Drive-by constexprify some of the existing tests.

Diff Detail

Event Timeline

Quuxplusone requested review of this revision.Jan 22 2022, 9:20 AM
Quuxplusone created this revision.
Herald added 1 blocking reviewer(s): Restricted Project. · View Herald TranscriptJan 22 2022, 9:20 AM
Quuxplusone retitled this revision from [libc++] [test] Fix LWG3146 "Excessive unwrapping in std::ref/cref" to [libc++] Fix LWG3146 "Excessive unwrapping in std::ref/cref".Jan 22 2022, 11:34 AM
philnik accepted this revision as: philnik.Jan 22 2022, 2:21 PM

LGTM % nits

libcxx/include/__functional/reference_wrapper.h
179

Pre-existing

libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/cref_2.pass.cpp
39

I think I'd rather see // LWG 3146 here. Both tests are for the LWG issue.

Quuxplusone marked an inline comment as done.
Quuxplusone edited the summary of this revision. (Show Details)

Address review comments. Fix the C++03 test failure.
Comment on a hacky workaround in std::cref; I'll post a separate PR showing how we might remove it.

Mordante accepted this revision as: Mordante.Jan 23 2022, 4:28 AM

LGTM!

libcxx/include/__functional/reference_wrapper.h
213–215

That makes it clear it's supposed to work like this in all Standard modes and it's not a C++20 change.
Obviously this is kind of moot due to D117974.

libcxx/test/std/utilities/function.objects/refwrap/refwrap.helpers/cref_2.pass.cpp
25

Nice to see these constexpr tests!

ldionne accepted this revision.Jan 25 2022, 3:49 PM
This revision is now accepted and ready to land.Jan 25 2022, 3:49 PM