Le C++ moderne désigne l'évolution du langage de programmation C++ au-delà de ses principes de conception originels, en intégrant des fonctionnalités, des idiomes et des bonnes pratiques plus récents apparus depuis la création du langage.
Le C++ est normalisé par l'Organisation internationale de normalisation (ISO). Les normes C++ sont généralement publiées tous les trois ans environ, apportant de nouvelles fonctionnalités et améliorations au langage.
Le C++ moderne introduit toute une gamme de nouvelles fonctionnalités visant à améliorer la clarté, la sûreté et les performances du code. Les pointeurs intelligents ont été un ajout formidable. En effet, ils offrent une gestion de la mémoire plus sûre et plus pratique que les pointeurs bruts.
Les pointeurs intelligents sont désormais populaires et largement utilisés dans les projets C++. Un coup d'œil rapide à quelques-uns des projets C++ les plus populaires sur GitHub montre que les pointeurs intelligents sont souvent la manière privilégiée de gérer les pointeurs.
Cependant, les pointeurs bruts font toujours partie du langage, et de nombreux développeurs continuent de les utiliser. Alors pourquoi ne pas aider les développeurs à utiliser les pointeurs intelligents en permettant au compilateur d'imposer leur usage ? La proposition consiste à ajouter un nouvel attribut pour spécifier qu'une classe ne peut pas utiliser de pointeurs bruts comme types de champs ou types de paramètres de méthodes.

Ainsi, le compilateur pourrait empêcher l'utilisation de pointeurs bruts dans la classe :)
Par ailleurs, je pense qu'il serait utile d'ajouter un attribut [[modern]] pour indiquer qu'une classe suit les pratiques du C++ moderne.

Le compilateur pourrait alors rejeter les pratiques C++ héritées au sein de cette classe.
Une autre suggestion concerne la manière dont les pointeurs partagés sont déclarés. Puisque les pointeurs intelligents sont désormais largement utilisés, pourquoi ne pas fournir une syntaxe abrégée pour déclarer un pointeur partagé ? Au lieu d'écrire :
std::shared_ptr<Test> ptr_name;
on pourrait simplement écrire :
ref Test ptr_name;
Si ces propositions n'introduisent pas de capacités majeures dans le langage, il serait précieux de fournir des mécanismes permettant au compilateur de protéger le code de certains écueils associés aux pratiques C++ héritées.
