ฉันมีรหัสเช่นนี้:
#include <vector>
#include <utility>
int main()
{
std::vector<bool> vb{true, false};
std::swap(vb[0], vb[1]);
}
ข้อโต้แย้งเกี่ยวกับความมีสติvector<bool>
นอกเหนือจากนี้สิ่งนี้ใช้ได้ผลดีกับ:
- เสียงดังกราวสำหรับ Mac
- Visual Studio สำหรับ Windows
- GCC สำหรับ Linux
จากนั้นฉันพยายามสร้างด้วย Clang บน Windows และได้รับข้อผิดพลาดต่อไปนี้ (ย่อ):
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>&&
ฉันประหลาดใจที่ผลลัพธ์ต่างกันในการติดตั้งใช้งาน
ทำไมมันไม่ทำงานกับ Clang บน Windows?
/permissive-
(ความสอดคล้อง) ซึ่งโดยทั่วไปควรจะใช้อยู่ดี;)
operator[]
lvalue หรือไม่ และสามารถstd::swap
ทำงานกับ rvalues และ xvalues ได้หรือไม่?