モダンC++とは、C++プログラミング言語がその当初の設計原則を超えて進化したものを指し、言語の誕生以来登場してきた新しい機能、イディオム、ベストプラクティスを取り入れています。
C++は国際標準化機構(ISO)によって標準化されています。C++標準は通常数年ごとにリリースされ、言語に新しい機能と改善をもたらします。
モダンC++は、コードの明確さ、安全性、パフォーマンスの向上を目的とした一連の新機能を導入しています。スマートポインタは素晴らしい追加でした。実際、生ポインタと比較して、より安全で便利なメモリ管理を提供します。
スマートポインタは今や人気があり、C++プロジェクトで広く使用されています。GitHubで最も人気のあるC++プロジェクトのいくつかをざっと見ると、スマートポインタがポインタを管理する好ましい方法であることがよくわかります。
しかし、生ポインタは依然として言語の一部であり、多くの開発者がそれらを使い続けています。では、コンパイラにスマートポインタの使用を強制させることで、開発者がスマートポインタを使えるように支援してはどうでしょうか?この提案は、クラスがフィールド型やメソッドパラメータ型として生ポインタを使用できないことを指定する新しい属性を追加するものです。

この方法で、コンパイラはクラス内で生ポインタが使用されるのを防ぐことができます :)
さらに、クラスがモダンC++の慣行に従っていることを示す[[modern]]属性を追加すると便利だと思います。

コンパイラはそのクラス内のレガシーなC++慣行を拒否できるようになります。
もう一つの提案は、共有ポインタの宣言方法に関するものです。スマートポインタが今や広く使用されているのですから、共有ポインタを宣言するための短縮構文を提供してはどうでしょうか?次のように入力する代わりに:
std::shared_ptr<Test> ptr_name;
単に次のように書けるのです:
ref Test ptr_name;
これらの提案は言語に大きな新機能を導入するものではないかもしれませんが、コンパイラがレガシーなC++慣行に伴ういくつかの落とし穴からコードを保護できるメカニズムを提供することは価値があるでしょう。
