Концепция, лежащая в основе ваших ожиданий, является своего рода полиморфизмом времени компиляции ....
Этого можно добиться, перегрузив функцию.
Нет ничего плохого в написании двух разных функций (как сказал DimChtz в комментариях) .... одна с аргументом для типа B, а другая с аргументом для типа C.