Это разрешено, если вы используете полиморфизм вместо шаблонов. Или, если вам не нужно расширять интерфейс, видимый function
, подойдет простое наследование.
void function( ABC & );
void function() {
class special : public ABC {
virtual void moof() {}
} local;
function(local);
}