As Armen and Jarod noted, using will bring all the fun to the derived class. Jarod had a great idea: delete an evil function! By combining their answers, I got the following:
template<typename T1, typename T2> class Derived : private Base<T1> { public: using Base<T1>::fun; void fun(float) = delete; };
which does exactly what I originally wanted!
source share