C'est un simple wrapper autours d'une référence. Ça permet de stocker des références dans un std::vector.
Ça se comporte comme une référence : on à la garantie que ça ne pointera pas sur nullptr, mais rien de plus.
Il est possible d'avoir des ref invalides (retourner une ref sur un objet local par exemple), pareil pour std::reference_wrapper.