Une fonction sans ref-qualificatif peut être appelé pour les deux rvalue et lvalues. Une fonction avec un &&
ref-qualificatif ne peut être appelée que pour les rvalues. Une fonction avec un &
ref-qualificatif ne peut être appelée que pour lvalues.
class No { void foo(); };
class L { void foo() &; };
class R { void foo() &&; };
No().foo(); // valid
No no; no.foo(); // valid
L().foo(); // invalid
L l; l.foo(); // valid
R().foo(); // valid
R r; r.foo(); // invalid
Malheureusement, je ne peux que trouver cette règle 5.5/6, qui s'applique uniquement aux pointeur vers membre de déréférencement des expressions. Je sais que cela s'applique, si trop.
En outre, vous ne pouvez pas surcharger sur ref-qualificatif vs pas de ref-qualificatif, voir 13.1/2 point 3. Vous pouvez surcharge sur &
vs &&
.
(Et en raison de ma recherche infructueuse de la norme, LRiO de répondre a toutes les info en trop.)