私はこのようなコードを持っています:
#include <vector>
#include <utility>
int main()
{
std::vector<bool> vb{true, false};
std::swap(vb[0], vb[1]);
}
vector<bool>
脇見の健全性についての議論は、これはうまく機能していました:
- Mac用のClang
- Visual Studio for Windows
- 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[]
左辺値の結果ですか?std::swap
右辺値とx値を操作できますか?