非 constexpr ライブラリ関数の拡張処理は準拠していますか?
非 constexpr 標準ライブラリ関数を constexpr として扱う GCC の機能特定の状況では、次のような疑問が生じますconformance.
標準の矛盾
ドラフト C 11 標準では、組み込み関数を constexpr として扱うことが明示的に許可されるように見えました。しかし、C 12 でコンセンサスが変化し、提案が変更されたため、C 14 ではこの動作を明示的に禁止することになりました。
As-If ルール
C 11 では、 as-if ルールがこの動作を許可しているかどうかは不明でした。その可能性を示唆する意見もありましたが、この解釈は、この特定のトピックを扱う LWG 問題 2013 の決議では確認されていません。
GCC の実装
GCC は実装されましたこの動作は、constexpr 関数としての暗黙的な処理を許可する、LWG 2013 の以前に提案された解決策に基づいています。ただし、最終解像度が変更され、この拡張機能は C 14 に準拠していません。
Strict モードでの準拠
C 14 標準に準拠するには、GCC次の場合、厳密準拠モード (-std=c 11 -pedantic または -std=c 14 -pedantic) で警告を発行する必要があります。 constexpr コンテキストで使用される非 constexpr ライブラリ関数が発生しました。あるいは、これらのモードではこの動作を無効にする必要があります。
組み込みの除外
コンパイラ組み込みは標準でカバーされていないため、別の方法で処理される可能性があります。おそらく、 constexpr コンテキストでのコンパイラ組み込み関数の使用は引き続き許容されます。
以上がGCC による Constexpr コンテキスト内の非 constexpr 標準ライブラリ関数の拡張処理は C 標準に準拠していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。