निम्नलिखित कोडबजना, std :: shared_ptr और std :: कम/ऑपरेटर <
#include <memory>
int main() {
std::shared_ptr<int> ptr0(new int);
std::shared_ptr<int> ptr1(new int);
bool result = ptr0 < ptr1;
}
निम्न त्रुटि पैदा करता है जब बजना के साथ संकलित किया जा रहा करने के बाद (संस्करण 3.1, LLVM 3.1, डेबियन GNU/लिनक्स सिड)
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/shared_ptr.h:364:14: error: no matching function for call to object of type 'std::less<_CT>'
return std::less<_CT>()(__a.get(), __b.get());
^~~~~~~~~~~~~~~~
foo.cpp:9:21: note: in instantiation of function template specialization 'std::operator<<int, int>' requested here
bool result = ptr0 < ptr1;
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/stl_function.h:236:7: note: candidate function not viable: no known conversion from 'int *' to 'int *&&&' for
1st argument;
operator()(const _Tp& __x, const _Tp& __y) const
^
जीसीसी (संस्करण 4.7.0) के साथ एक ही कोड को संकलित करने से कोई त्रुटि संदेश नहीं फेंकता है। क्या कोई कारण है कि ऑपरेटर <() क्लैंग में साझा पॉइंटर्स के लिए काम नहीं करता है?
वाह, 'int * &&&' ... – kennytm