[libcxx-commits] [PATCH] D92250: [libc++] Consistently replace `std::` qualification with `_VSTD::` or nothing. NFCI.
Arthur O'Dwyer via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Dec 1 20:06:34 PST 2020
Quuxplusone marked an inline comment as done.
Quuxplusone added inline comments.
================
Comment at: libcxx/include/memory:2086
{
- using std::swap;
+ using _VSTD::swap;
swap(first(), __x.first());
----------------
mclow.lists wrote:
> This one may not be correct.
> If a user has implemented an overload for `std::swap` for `T1` or `T2`, then it's not clear to me that this wil find it.
Hmm, that's quite true, this won't find a user-defined `std::swap` inserted manually into the outer `std` namespace. https://godbolt.org/z/vxKEcq
**However...** my change here is just bringing this call-site into line with the 20 other places in libc++ where we do the std::swap two-step. All 20 of them (and now, also this 21st) do `using _VSTD::swap;`. So if this one is now wrong, those other 20 are also wrong, and have been wrong for years.
Notably, `std::pair`'s `swap` is implemented in terms of `using _VSTD::swap;` and not in terms of `using std::swap;`.
I think the correct response here is "Users shouldn't be adding their own functions into namespace std. They should be writing ADL swap functions instead."
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92250/new/
https://reviews.llvm.org/D92250
More information about the libcxx-commits
mailing list