I was hoping infer std::reference_wrapper<MyType> to MyType& automagically on bool operator<(. It is not matching the method. But the code is compiling when I add additional bool operator<( method. Am I missing something?
#include <iostream>
#include <set>
#include <functional>
class MyType {
public:
    bool operator<(const MyType& target) const {
        return this < ⌖
    }
};
// it doesn't compile if remove the method below.
bool operator<(const std::reference_wrapper<MyType>& a, const MyType& b) {
    return a.get() < b;
}
int main(int argc, char* argv[]) {
    std::set<std::reference_wrapper<MyType>> types;
    MyType t1, t2, t3;
    types.insert(std::ref(t1));
    types.insert(std::ref(t2));
    types.insert(std::ref(t3));
    types.insert(std::ref(t1));
    std::cout << "size: " << types.size() << std::endl;
    return 0;
}
Aucun commentaire:
Enregistrer un commentaire