ホームページ >バックエンド開発 >C++ >Consteval 関数は、関数の引数に応じてテンプレート パラメーター内の関数パラメーターを合法化できますか?

Consteval 関数は、関数の引数に応じてテンプレート パラメーター内の関数パラメーターを合法化できますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-24 03:53:30490ブラウズ

Can Consteval Functions Legalize Function Parameters in Template Parameters Dependent on Function Arguments?

Consteval 関数: 関数の引数に依存するテンプレート パラメーターの制限

C 17 では、関数に依存するテンプレート パラメーターに依存する constexpr 関数を定義します議論は禁止された。 C 20 の consteval 関数はコンパイル時の評価を強制することを約束していますが、これはそのようなコードが合法化できるという意味ですか?

質問:

consteval int foo(int i) { return std::integral_constant::value; }。このコードは C 20 で有効ですか?

答え:

いいえ。

説明:

consteval 関数の導入にも関わらず、非テンプレート関数定義は単一点の型解決を持つという基本原則は変わりません。提案されたコードを合法化すると、単一定義ルール (ODR) に影響を与える可能性があります。さらに、C 20 ペーパーでは、型の不一致の可能性があるため、関数パラメーターはコア定数式として扱われないと明示的に記載されています。

その結果、関数パラメーターは、テンプレート パラメーターの依存関係内で定数式として直接使用することはできません。 consteval 関数コンテキスト内。

以上がConsteval 関数は、関数の引数に応じてテンプレート パラメーター内の関数パラメーターを合法化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。