#include <iostream>
#include <vector>
#include <algorithm>
class CompareMe
{
public:
CompareMe(int in) : toCompare(in){}
int toCompare;
};
class Comparitor
{
public:
bool operator()(CompareMe * first, CompareMe * second)
{
return first->toCompare < second->toCompare;
}
};
class ComparitorOuter : public Comparitor{};
int main()
{
class ComparitorInner : public Comparitor{};
std::vector<CompareMe *> compares;
compares.push_back(new CompareMe(0));
compares.push_back(new CompareMe(1234));
compares.push_back(new CompareMe(163));
compares.push_back(new CompareMe(6));
compares.push_back(new CompareMe(12));
//This works, and properly sorts the array
ComparitorOuter comparitor;
std::sort(compares.begin(), compares.end(), comparitor);
//Uncomment out the sort below and it will not compile.
ComparitorInner comparitorInner;
std::sort(compares.begin(), compares.end(), comparitorInner);
std::vector<CompareMe *>::iterator it;
for(it = compares.begin(); it != compares.end(); ++it)
{
std::cout << (*it)->toCompare << std::endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKY2xhc3MgQ29tcGFyZU1lCnsKIHB1YmxpYzoKICAgIENvbXBhcmVNZShpbnQgaW4pIDogdG9Db21wYXJlKGluKXt9CiAgICBpbnQgdG9Db21wYXJlOwp9OwoKY2xhc3MgQ29tcGFyaXRvcgp7CnB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShDb21wYXJlTWUgKiBmaXJzdCwgQ29tcGFyZU1lICogc2Vjb25kKQogICAgewogICAgICAgIHJldHVybiBmaXJzdC0+dG9Db21wYXJlIDwgc2Vjb25kLT50b0NvbXBhcmU7CiAgICB9Cn07CgpjbGFzcyBDb21wYXJpdG9yT3V0ZXIgOiBwdWJsaWMgQ29tcGFyaXRvcnt9OwoKaW50IG1haW4oKQp7CiAgICBjbGFzcyBDb21wYXJpdG9ySW5uZXIgOiBwdWJsaWMgQ29tcGFyaXRvcnt9OwoKICAgIHN0ZDo6dmVjdG9yPENvbXBhcmVNZSAqPiBjb21wYXJlczsKICAgIGNvbXBhcmVzLnB1c2hfYmFjayhuZXcgQ29tcGFyZU1lKDApKTsKICAgIGNvbXBhcmVzLnB1c2hfYmFjayhuZXcgQ29tcGFyZU1lKDEyMzQpKTsKICAgIGNvbXBhcmVzLnB1c2hfYmFjayhuZXcgQ29tcGFyZU1lKDE2MykpOwogICAgY29tcGFyZXMucHVzaF9iYWNrKG5ldyBDb21wYXJlTWUoNikpOwogICAgY29tcGFyZXMucHVzaF9iYWNrKG5ldyBDb21wYXJlTWUoMTIpKTsKCiAgICAvL1RoaXMgd29ya3MsIGFuZCBwcm9wZXJseSBzb3J0cyB0aGUgYXJyYXkKICAgIENvbXBhcml0b3JPdXRlciBjb21wYXJpdG9yOwogICAgc3RkOjpzb3J0KGNvbXBhcmVzLmJlZ2luKCksIGNvbXBhcmVzLmVuZCgpLCBjb21wYXJpdG9yKTsKCiAgICAvL1VuY29tbWVudCBvdXQgdGhlIHNvcnQgYmVsb3cgYW5kIGl0IHdpbGwgbm90IGNvbXBpbGUuCiAgICBDb21wYXJpdG9ySW5uZXIgY29tcGFyaXRvcklubmVyOwogICAgc3RkOjpzb3J0KGNvbXBhcmVzLmJlZ2luKCksIGNvbXBhcmVzLmVuZCgpLCBjb21wYXJpdG9ySW5uZXIpOwoKICAgIHN0ZDo6dmVjdG9yPENvbXBhcmVNZSAqPjo6aXRlcmF0b3IgaXQ7CiAgICBmb3IoaXQgPSBjb21wYXJlcy5iZWdpbigpOyBpdCAhPSBjb21wYXJlcy5lbmQoKTsgKytpdCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgKCppdCktPnRvQ29tcGFyZSA8PCBzdGQ6OmVuZGw7CiAgICB9Cn0=