Est-ce que unique_ptr est garanti pour stocker nullptr après le déplacement?

Est-ce que unique_ptr est garanti pour stocker nullptr après le déplacement?

 std::unique_ptr p1{new int{23}}; std::unique_ptr p2{std::move(p1)}; assert(!p1); // is this always true? 

Oui, vous pouvez le comparer à nullptr après le move et il est garanti de comparer les deux.

De §20.8.1 / 4 [unique.ptr]

De plus, u pouvez, sur demande, transférer la propriété à un autre pointeur unique u2 . À la fin d’un tel transfert, les post-conditions suivantes sont détenues:
u2.p est égal au pré-transfert up ,
up est égal à nullptr , et

(le membre p est décrit plus haut – un pointeur unique est un object u qui stocke un pointeur sur un second object p )

Oui. C ++ 2011 Standard Section 20.7.1 / 4 :

De plus, vous pouvez, sur demande, transférer la propriété à un autre pointeur unique u2. À la fin d’un tel transfert, les postconditions suivantes tiennent […] [la source unique_ptr] est égale à nullptr …