void f( A const& a, B const& b );
void f( A&& a, B const& b );
void f( A const& a, B&& b );
void f( A&& a, B&& b );

こういうのって全部用意しなきゃいかんの?
template のときは特別扱いがあるらしいのは分かったんだけど、
だからってあらうる関数の引数を template にしてしまうわけにもいかないし…。