Dans le standard C++11, je ne comprends pas la raison pourquoi prendre l'adresse de nullptr est rejetée, alors que l'on est autorisé à prendre l'adresse de leur propre std::nullptr_t instances. Hormis le fait que nullptr est un mot clé réservé, est-il désigné le raisonnement de cette décision?
Tout simplement parce que cela m'amuse, j'ai tenté de contourner cette restriction avec la fonction suivante:
decltype(nullptr)* func(const decltype(nullptr) &nref) noexcept
{
return const_cast<decltype(nullptr)*>(reinterpret_cast<const decltype(nullptr)*>(&nref));
}
J'ai eu à utiliser reinterpret_cast sur le paramètre, car sans elle, j'ai été faire l'hystérique erreur:
error: invalid conversion from 'std::nullptr_t*' to 'std::nullptr_t*' [-fpermissive]
Lorsque j'appelle cette fonction en passant nullptr directement-je obtenir une adresse différente à chaque fois. Est nullptr attribuée dynamiquement une adresse juste à temps pour les comparaisons et le tel? Ou (plus probable) est peut-être le compilateur forcer une copie temporaire de l'objet sous-jacent?
Bien entendu, tout cela est l'information essentielle, je viens de le trouver intéressant, pourquoi cette restriction a été mise en œuvre (et par la suite pourquoi je vois le comportement que je suis).