Ils sont occasionnellement utiles. Le projet C++0x lui-même les utilise à quelques endroits, par exemple :
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
Les deux surcharges ci-dessus assurent que l'autre ref(T&)
y cref(const T&)
ne se lient pas aux rvalues (ce qui serait possible autrement).
Mise à jour
Je viens de vérifier la norme officielle N3290 qui n'est malheureusement pas accessible au public, et qui comporte en 20,8 des objets fonctionnels [function.objects]/p2 :
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
J'ai ensuite vérifié le projet post-C++11 le plus récent, qui est accessible au public, N3485 et dans 20.8 Objets fonctionnels [function.objects]/p2, il est toujours indiqué :
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
2 votes
Dans cette vidéo, STL dit
const&&
sont très importants, bien qu'il ne dise pas pourquoi : youtube.com/watch?v=JhgWFYfdIho#t=54m20s