#include <iostream>
#include <tuple>
template <typename T>
inline const T& max (const T& a, const T& b){
return a < b ? b : a;
}
namespace BigMath{
struct BigNumber{
int one = 0;
int two = 0;
void print() {
std::cout << "("<< one << ", " << two << ")" << std::endl;
}
operator int(){
return 2;
}
};
bool operator<(const BigNumber& a, const BigNumber& b){
return std::tie(a.one, a.two) < std::tie(b.one, b.two);
}
}
void f(int) {
std::cout << "::f" << std::endl;
}
namespace bla {
using BigMath::BigNumber;
void f(const BigNumber&) {
std::cout << "bla::foo" << std::endl;
}
//bool max() {return true;};
void printBigger(const BigNumber& a, const BigNumber& b) {
BigNumber x = max(a,b);
x.print();
(f)(a);
f(a);
}
}
int main() {
BigMath::BigNumber a;
a.one = 3;
a.two = 0;
BigMath::BigNumber b;
b.one = 2;
b.two = 2;
bla::printBigger(a,b);
// Bla bla;
// bla.printBigger(a,b);
(f)(a);
f(a);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHVwbGU+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KaW5saW5lIGNvbnN0IFQmIG1heCAoY29uc3QgVCYgYSwgY29uc3QgVCYgYil7CglyZXR1cm4gYSA8IGIgPyBiIDogYTsKfQoKbmFtZXNwYWNlIEJpZ01hdGh7CglzdHJ1Y3QgQmlnTnVtYmVyewoJCWludCBvbmUgPSAwOwoJCWludCB0d28gPSAwOwoJCXZvaWQgcHJpbnQoKSB7CgkJCXN0ZDo6Y291dCA8PCAiKCI8PCBvbmUgPDwgIiwgIiA8PCB0d28gPDwgIikiIDw8IHN0ZDo6ZW5kbDsKCQl9CgkJb3BlcmF0b3IgaW50KCl7CgkJCXJldHVybiAyOwoJCX0KCX07CgkKCWJvb2wgb3BlcmF0b3I8KGNvbnN0IEJpZ051bWJlciYgYSwgY29uc3QgQmlnTnVtYmVyJiBiKXsKCQlyZXR1cm4gc3RkOjp0aWUoYS5vbmUsIGEudHdvKSA8IHN0ZDo6dGllKGIub25lLCBiLnR3byk7Cgl9Cn0KCnZvaWQgZihpbnQpIHsKCXN0ZDo6Y291dCA8PCAiOjpmIiA8PCBzdGQ6OmVuZGw7Cn0KCm5hbWVzcGFjZSBibGEgewoJdXNpbmcgQmlnTWF0aDo6QmlnTnVtYmVyOwoJCgl2b2lkIGYoY29uc3QgQmlnTnVtYmVyJikgewoJCXN0ZDo6Y291dCA8PCAiYmxhOjpmb28iIDw8IHN0ZDo6ZW5kbDsKCX0KCQoJLy9ib29sIG1heCgpIHtyZXR1cm4gdHJ1ZTt9OwoKCXZvaWQgcHJpbnRCaWdnZXIoY29uc3QgQmlnTnVtYmVyJiBhLCBjb25zdCBCaWdOdW1iZXImIGIpIHsKCQlCaWdOdW1iZXIgeCA9IG1heChhLGIpOwoJCXgucHJpbnQoKTsKCQkoZikoYSk7CgkJZihhKTsKCX0KfQoKaW50IG1haW4oKSB7CglCaWdNYXRoOjpCaWdOdW1iZXIgYTsKCWEub25lID0gMzsKCWEudHdvID0gMDsKCUJpZ01hdGg6OkJpZ051bWJlciBiOwoJYi5vbmUgPSAyOwoJYi50d28gPSAyOwoJCglibGE6OnByaW50QmlnZ2VyKGEsYik7Ci8vCUJsYSBibGE7Ci8vCWJsYS5wcmludEJpZ2dlcihhLGIpOwoJCgkoZikoYSk7CglmKGEpOwoJCQoJcmV0dXJuIDA7Cn0=