は、私が(本当に、よく、型変換)のstd :: LOWER_BOUND()とstd :: UPPER_BOUND()構文での矛盾のように見えるものを見て、誰でもしてください解明できれば不思議でしたか?コメントごとに、1行目との明白な類似性にもかかわらず2行目はコンパイルされません。あなたは、3行目に示された形を使用する必要があります(少なくとも、GCC 4.7.3/Ubuntuの上で64ビットを - それは私がと遊ぶために持っているすべてです)UPPER_BOUNDとLOWER_BOUND一貫性のない値要件
#include <set>
#include <algorithm>
using namespace std;
class MyInt {
private:
int val;
public:
MyInt(int _val): val(_val) {}
bool operator<(const MyInt& other) const {return val < other.val;}
};
int main() {
set<MyInt> s;
s.insert(1); // demonstrate implicit conversion works
s.insert(MyInt(2));
s.insert(3); // one last one for the road
set<MyInt>::iterator itL = lower_bound(s.begin(), s.end(), 2); //LINE 1
// the line below will NOT compile
set<MyInt>::iterator itU = upper_bound(s.begin(), s.end(), 2); //LINE 2
// the line below WILL compile
set<MyInt>::iterator itU2 = upper_bound(s.begin(), s.end(), MyInt(2)); // LINE 3
return 0;
}
同じ動作。間違いなくg ++バグです。 –