mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-19 00:55:13 +08:00
libstdc++: Use hidden friends for vector<bool>::reference swap overloads
These swap overloads are non-standard, but are needed to make swap work for vector<bool>::reference rvalues. They don't need to be called explicitly, only via ADL, so hide them from normal lookup. This is what I've proposed as the resolution to LWG 3638. libstdc++-v3/ChangeLog: * include/bits/stl_bvector.h (swap(_Bit_reference, _Bit_reference)) (swap(_Bit_reference, bool&), swap(bool&, _Bit_reference)): Define as hidden friends of _Bit_reference.
This commit is contained in:
parent
ba6e17e78d
commit
59434931fb
@ -125,36 +125,36 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
|
||||
void
|
||||
flip() _GLIBCXX_NOEXCEPT
|
||||
{ *_M_p ^= _M_mask; }
|
||||
};
|
||||
|
||||
#if __cplusplus >= 201103L
|
||||
_GLIBCXX20_CONSTEXPR
|
||||
inline void
|
||||
swap(_Bit_reference __x, _Bit_reference __y) noexcept
|
||||
{
|
||||
bool __tmp = __x;
|
||||
__x = __y;
|
||||
__y = __tmp;
|
||||
}
|
||||
_GLIBCXX20_CONSTEXPR
|
||||
friend void
|
||||
swap(_Bit_reference __x, _Bit_reference __y) noexcept
|
||||
{
|
||||
bool __tmp = __x;
|
||||
__x = __y;
|
||||
__y = __tmp;
|
||||
}
|
||||
|
||||
_GLIBCXX20_CONSTEXPR
|
||||
inline void
|
||||
swap(_Bit_reference __x, bool& __y) noexcept
|
||||
{
|
||||
bool __tmp = __x;
|
||||
__x = __y;
|
||||
__y = __tmp;
|
||||
}
|
||||
_GLIBCXX20_CONSTEXPR
|
||||
friend void
|
||||
swap(_Bit_reference __x, bool& __y) noexcept
|
||||
{
|
||||
bool __tmp = __x;
|
||||
__x = __y;
|
||||
__y = __tmp;
|
||||
}
|
||||
|
||||
_GLIBCXX20_CONSTEXPR
|
||||
inline void
|
||||
swap(bool& __x, _Bit_reference __y) noexcept
|
||||
{
|
||||
bool __tmp = __x;
|
||||
__x = __y;
|
||||
__y = __tmp;
|
||||
}
|
||||
_GLIBCXX20_CONSTEXPR
|
||||
friend void
|
||||
swap(bool& __x, _Bit_reference __y) noexcept
|
||||
{
|
||||
bool __tmp = __x;
|
||||
__x = __y;
|
||||
__y = __tmp;
|
||||
}
|
||||
#endif
|
||||
};
|
||||
|
||||
struct _Bit_iterator_base
|
||||
: public std::iterator<std::random_access_iterator_tag, bool>
|
||||
|
Loading…
Reference in New Issue
Block a user