Ben böyle bir kod var:
#include <vector>
#include <utility>
int main()
{
std::vector<bool> vb{true, false};
std::swap(vb[0], vb[1]);
}
Bir vector<bool>
yana akıl sağlığı ile ilgili tartışmalar, bu iyi çalışıyor:
- Mac için Clang
- Windows için Visual Studio
- Linux için GCC
Sonra Windows üzerinde Clang ile inşa etmeyi denedim ve aşağıdaki hatayı aldım (kısaltılmış):
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>&&
Sonuçların uygulamalar arasında farklılık göstermesine şaşırdım.
Windows'ta Clang ile neden çalışmıyor?
/permissive-
genellikle yine de kullanılması gereken (uygunluk) ile derlenmez ;)
operator[]
Bir değerin sonucu mu? vestd::swap
değerlerde ve x değerlerinde çalışabilir mi?