#include <stdio.h>
namespace named
{
template<typename RandomIt>
void sort_it_it(RandomIt first, RandomIt last)
{
(void) last;
(void) (first + 1);
(void) (bool(*first < *first));
// stuff...
}
template<typename Container, typename Compare>
void sort_cont_cmp(Container& c, Compare cmp)
{
typename Container::iterator b = c.begin(), e = c.end();
(void) e;
(void) (b + 1);
(void) (bool(cmp(*b, *b)));
// stuff...
}
}
namespace overloaded
{
template<typename RandomIt>
void sort(RandomIt first, RandomIt last)
{
puts("sort(RandomIt, RandomIt)");
named::sort_it_it(first, last);
}
template<typename Container, typename Compare>
void sort(Container& c, Compare cmp)
{
puts("sort(Container&, Compare)");
named::sort_cont_cmp(c, cmp);
}
}
#include <vector>
#include <functional>
int main()
{
std::vector<int> v(10, 42);
named::sort_it_it(v.begin(), v.end()); // ok (of course)
named::sort_cont_cmp(v, std::less<int>()); // ok (of course)
overloaded::sort(v.begin(), v.end()); // ok
overloaded::sort(v, std::less<int>()); // ok too
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgpuYW1lc3BhY2UgbmFtZWQKewoJdGVtcGxhdGU8dHlwZW5hbWUgUmFuZG9tSXQ+Cgl2b2lkIHNvcnRfaXRfaXQoUmFuZG9tSXQgZmlyc3QsIFJhbmRvbUl0IGxhc3QpCgl7CgkJKHZvaWQpIGxhc3Q7CgkJKHZvaWQpIChmaXJzdCArIDEpOwoJCSh2b2lkKSAoYm9vbCgqZmlyc3QgPCAqZmlyc3QpKTsKCQkvLyBzdHVmZi4uLgoJfQoJCgl0ZW1wbGF0ZTx0eXBlbmFtZSBDb250YWluZXIsIHR5cGVuYW1lIENvbXBhcmU+Cgl2b2lkIHNvcnRfY29udF9jbXAoQ29udGFpbmVyJiBjLCBDb21wYXJlIGNtcCkKCXsKCQl0eXBlbmFtZSBDb250YWluZXI6Oml0ZXJhdG9yIGIgPSBjLmJlZ2luKCksIGUgPSBjLmVuZCgpOwoJCSh2b2lkKSBlOwoJCSh2b2lkKSAoYiArIDEpOwoJCSh2b2lkKSAoYm9vbChjbXAoKmIsICpiKSkpOwoJCS8vIHN0dWZmLi4uCgl9Cn0KCm5hbWVzcGFjZSBvdmVybG9hZGVkCnsKCXRlbXBsYXRlPHR5cGVuYW1lIFJhbmRvbUl0PgoJdm9pZCBzb3J0KFJhbmRvbUl0IGZpcnN0LCBSYW5kb21JdCBsYXN0KQoJewoJCXB1dHMoInNvcnQoUmFuZG9tSXQsIFJhbmRvbUl0KSIpOwoJCW5hbWVkOjpzb3J0X2l0X2l0KGZpcnN0LCBsYXN0KTsKCX0KCQoJdGVtcGxhdGU8dHlwZW5hbWUgQ29udGFpbmVyLCB0eXBlbmFtZSBDb21wYXJlPgoJdm9pZCBzb3J0KENvbnRhaW5lciYgYywgQ29tcGFyZSBjbXApCgl7CgkJcHV0cygic29ydChDb250YWluZXImLCBDb21wYXJlKSIpOwoJCW5hbWVkOjpzb3J0X2NvbnRfY21wKGMsIGNtcCk7Cgl9Cn0KCiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgoKaW50IG1haW4oKQp7CglzdGQ6OnZlY3RvcjxpbnQ+IHYoMTAsIDQyKTsKCQoJbmFtZWQ6OnNvcnRfaXRfaXQodi5iZWdpbigpLCB2LmVuZCgpKTsgLy8gb2sgKG9mIGNvdXJzZSkKCW5hbWVkOjpzb3J0X2NvbnRfY21wKHYsIHN0ZDo6bGVzczxpbnQ+KCkpOyAvLyBvayAob2YgY291cnNlKQoJCglvdmVybG9hZGVkOjpzb3J0KHYuYmVnaW4oKSwgdi5lbmQoKSk7IC8vIG9rCglvdmVybG9hZGVkOjpzb3J0KHYsIHN0ZDo6bGVzczxpbnQ+KCkpOyAvLyBvayB0b28KfQ==