et le type de `val` est une **référence** vers un `SomethingOrNothing<T>` (il faut noter le `&` avant le type). La référence en Rust est un moyen d'emprunter
la propriété d'une valeur. Ainsi quand on va sortir de la portée de la fonction, la variable `val`, qui est une référence
va être détruite, mais les données qui sont liées à cette référence ne le seront pas. C'est pour cela que contrairement à
ce qui se passe dans la section [Bind et move](#bind-et-move) on peut appeler deux fois la fonction `print(&val)`.
Il faut bien noter que la *référence* a la syntaxe `&<variable>` comme en C.
#### Exercice
Corrigez ce code pour qu'il compile (sans enlever de lignes évidemment)
On constante qu'on doit déréférencer `t` (appeler `*t`), car `t` est une référence vers `T` (il est de type `&T`), car la fonction `new()` s'attend à un `T` et non à un `&T`.
L'opérateur `*<variable>` est l'opérateur de déréférencement et cette syntaxe est la même que celle du C.
Si par malheur on oubliait le `*t` on aurait une erreur de compilation, car
le vérificateur de type du Rust ne laisse pas passer ce genre de choses.