Они иногда полезны. Сам проект C ++ 0x использует их в нескольких местах, например:
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
Перечисленные выше две перегрузки гарантируют, что другие функции ref(T&)
и cref(const T&)
не привязываются к значениям (что в противном случае было бы возможно).
Обновление
Я только что проверил официальный стандарт N3290 , который, к сожалению, не является общедоступным и имеет в 20.8 Объекты функций [function.objects] / p2:
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
Затем я проверил самый последний после C ++ 11 черновик, который является общедоступным, N3485 , а в 20.8 объектах функций [function.objects] / p2 он все еще говорит:
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;