다음과 같은 코드가 있습니다.
#include <vector>
#include <utility>
int main()
{
std::vector<bool> vb{true, false};
std::swap(vb[0], vb[1]);
}
vector<bool>
제쳐두고 의 정신에 대한 논쟁 , 이것은 잘 작동했습니다 :
- Mac 용 Clang
- Windows 용 Visual Studio
- Linux 용 GCC
그런 다음 Windows에서 Clang을 사용하여 빌드하려고 시도하고 다음과 같은 오류가 발생했습니다.
error: no matching function for call to 'swap'
std::swap(vb[0], vb[1]);
^~~~~~~~~
note: candidate function [with _Ty = std::_Vb_reference<std::_Wrap_alloc<std::allocator<unsigned int> > >, $1 = void] not viable: expects an l-value for 1st argument
inline void swap(_Ty& _Left, _Ty& _Right) _NOEXCEPT_COND(is_nothrow_move_constructible_v<_Ty>&&
구현마다 결과가 다르다는 것에 놀랐습니다.
Windows에서 Clang과 함께 작동하지 않는 이유는 무엇입니까?
/permissive-
(적합성)으로 컴파일되지 않으며 일반적으로 어쨌든 사용해야합니다.)
operator[]
lvalue 의 결과 입니까?std::swap
rvalue 및 xvalue에서 작동 할 수 있습니까?