मेरे पास इस तरह का कोड है:
#include <vector>
#include <utility>
int main()
{
std::vector<bool> vb{true, false};
std::swap(vb[0], vb[1]);
}
vector<bool>
एक तरफ की पवित्रता के बारे में तर्क , यह ठीक काम कर रहा था:
- मैक के लिए क्लैंग
- विंडोज के लिए विजुअल स्टूडियो
- लिनक्स के लिए जीसीसी
फिर मैंने इसे विंडोज़ पर क्लैंग के साथ बनाने की कोशिश की और निम्नलिखित त्रुटि प्राप्त की (संक्षिप्त):
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>&&
मुझे आश्चर्य है कि परिणाम पूरे कार्यान्वयन में भिन्न हैं।
यह विंडोज पर क्लैंग के साथ काम क्यों नहीं करता है?
/permissive-
(अनुरूपता) के साथ संकलित नहीं करता है , जिसे आम तौर पर किसी भी तरह से उपयोग किया जाना चाहिए;)
operator[]
एक अंतराल का परिणाम है ? औरstd::swap
rvalues और xvalues पर काम कर सकते हैं?