В общем, я не могу придумать разумного варианта использования, где будет разница, но я предполагаю, что вы могли бы найти случай, когда операция имеет разные реализации для rvalue-ссылок и rvalues, а языковые правила не диктуют что тип возвращаемого значения различных перегрузок должен быть одинаковым (даже если здравый смысл диктует это).
Таким образом, в общем случае различий не будет, а в случае различий, эти случаи требуют особого внимания и заботы о гораздо худших проблемах, чем сам шаблон ...
// sick corner case:
struct type {};
int operator+( type&& lhs, type&& rhs );
double operator+( type const & lhs, type const & rhs );
Я могу подумать о ситуациях, когда вы хотели бы предложить различные перегрузки для ссылок на rvalue (рассмотрите некоторую реализацию списка, который предлагает operator+
как конкатенацию, тогда перегрузка с ссылками на rvalue могла бы избежать затрат на копирование путем простого искажения с указателями и оставляя списки аргументов пустыми), но было бы крайне странно, если бы тип результата зависел от l / rvalue-ness аргументов.