How about:
template <> void function(Derived &arg)
{
function<Base>( arg );
}
EDIT: You can also do this with function overloading, as aschepler has suggested:
void function(Derived &arg)
{
function<Base>( arg );
}
It's conceptually the same, although, I agree, slightly better :)