मैंने देखा कि std :: lower_bound() और std :: upper_bound() वाक्यविन्यास (अच्छी तरह से, प्रकार-रूपांतरण, वास्तव में) में असंगतता की तरह दिखता है और यह सोच रहा था कि कोई भी कृपया स्पष्ट कर सकता है? टिप्पणियों के अनुसार, लाइन 2 की स्पष्ट समानता के बावजूद लाइन 2 संकलित नहीं होगा; आप फार्म 3 लाइन पर दिखाया उपयोग करने की आवश्यकता (कम से कम जीसीसी पर 4.7.3/ubuntu 64-बिट - कि सभी के साथ मैं खेलने के लिए आपके पास यह है)ऊपरी_बाउंड और निचला_बाउंड असंगत मूल्य आवश्यकताओं
#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 ++ 4.8.4 के साथ समान व्यवहार। यह निश्चित रूप से एक जी ++ बग है। –