#include <iostream>
#include <queue>
#include <vector>
 
using std::priority_queue;
using std::cout;
using std::vector;
 
class Base {
	public:
	virtual bool operator() (int l, int r) const {
		cout << "Should not be called" << std::endl;
		return 0;
	}
	virtual ~Base() {}
};
class A : public Base { 
	public:
	bool operator() (int l, int r) const override {
		cout << "Should be called!!!!";
		return l < r;
	}
};
int main() {
	priority_queue<int, vector<int>, Base> pq((A()));
	pq.push(1);
	pq.push(2);
	pq.push(3);
	pq.push(0);
	cout << pq.top();
	return 0;
}