我尝试用VS2010编译它
long long min = std::numeric_limits<int>::min();
unsigned long long max = std::numeric_limits<int>::max();
std::bitset<64> minimal(min);//here I'm getting the error
cout << "minimal: " << minimal;
error:
error C2668: 'std::bitset<_Bits>::bitset' : ambiguous call to overloaded function
1> with
1> [
1> _Bits=64
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\bitset(136): could be 'std::bitset<_Bits>::bitset(_ULonglong)'
1> with
1> [
1> _Bits=64
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\bitset(127): or 'std::bitset<_Bits>::bitset(int)'
1> with
1> [
1> _Bits=64
1> ]
1> while trying to match the argument list '(__int64)'
为什么呢?显然这个参数是long long类型,构造函数应该用于这种类型。我不明白发生了什么。
答案 0 :(得分:3)
我没有看到long long
作为您在该列表中给出的选项之一。我只看到:
为什么不将min
投射到unsigned long long
并查看是否修复了它。或者更好的是,使用无符号类型 - 您是否有可能拥有具有负数元素的位集? : - )
答案 1 :(得分:2)
这是VC2010中的一个错误,已在VC2011中修复。
Bug Report 注意那里的评论。