この質問では、static_assert と同様に機能する「static_warning」構造を実装する可能性について詳しく掘り下げています。ただし、コンパイル中には警告のみが生成され、コンパイルを直ちに停止するエラーは生成されません。調査に入り、質問に答えてみましょう。
Michael E からのコメントに触発された、魅力的なソリューションには、目的の機能を満たすようにマクロを変更することが含まれます。
<code class="c++">#define STATIC_WARNING(cond, msg) struct PP_CAT(static_warning,__LINE__) { \ DEPRECATE(void _(const ::detail::false_type&),msg) {}; \ void _(const ::detail::true_type& ) {}; \ PP_CAT(static_warning,__LINE__)() {_(::detail::converter<(cond)>());} \ }</code>
このコードは DEPRECATE マクロを使用して特定のメソッドに非推奨のフラグを立て、プログラム フローの特定の時点で警告を伝えます。
STATIC_WARNING マクロ:
<code class="c++">STATIC_WARNING(1 == 2, "Failed with 1 and 2");</code>結果適切な警告レベルでコンパイルすると、コンパイラは意図した動作に似た警告メッセージを発行します:「'_' は非推奨です:...」
以上が「static_assert」のような「静的警告」を作成できますが、エラーではなく警告が表示されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。