#include <functional>

struct Quux {
	template <typename Callable>
	void part3(int, Callable c){ c(); }

	template <typename Callable>
	void part2(Callable c){
		c();
	} 
	
	template <typename Callable>
	void part1(Callable c){
		part2(std::bind(&Quux::part3, this, 3, c));
	}
};


void f(int){}

int main(){
	Quux q;
	q.part1(std::bind(f, 1));
}