メタプログラミングの領域では、ステートフル メタプログラミングとして知られる constexpr カウンターという興味深い手法が登場します。この複雑なテクニックは、開発者の間で賞賛と不安の両方を引き起こしました。 C 17 の出現により、その合法性は再検討されましたか?
C 14 のステートフル メタプログラミング
提供されたコード スニペットが示すように、C 14 のステートフル メタプログラミングはC 14 は、フレンド宣言、ADL、constexpr を利用して、呼び出し全体で状態を維持するカウンターを作成します。一見難解な性質にもかかわらず、この手法は C 14 の下で合法です。
The Dark Cloud: CWG Issue 2118
ただし、この手法は C 標準から厳しい監視を受けています。委員会は、特にアクティブな問題 CWG 問題 2118 を通じて、この技術の無名性を認識しており、その境界設定が不適切であることを主張しています。
C 17 のサイレント スタンス
CWG の懸念にもかかわらず、C 17 はこの問題に明示的に取り組んでいません。これは、将来的にその運命が変わる可能性があるという警告はあるものの、ステートフル メタプログラミングが引き続き C 17 で合法であることを意味します。ステートフル メタプログラミングが考案された後、遡って不正な形式であるとみなされる可能性があります。これにより、質問に示されているコード スニペットが無効になり、既存のコードベースに潜在的なリスクが生じます。
結論
ステートフル メタプログラミングの将来は依然として不確実です。 C 17 ではまだ合法ですが、CWG がこの手法に不快感を抱いていることから、その日が長くない可能性があることが示唆されています。この手法を採用する開発者は、この潜在的な警告を認識し、コードの整合性を確保するために C 標準の今後の更新を監視する必要があります。
以上がステートフル メタプログラミングは C 17 で合法ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。