2017-02-02 4 views
0

を使用することはできません:関数テンプレートまたはクラステンプレートのメンバ関数 のなぜ関数テンプレートの明示的なインスタンスが<a href="http://en.cppreference.com/w/cpp/language/function_template" rel="nofollow noreferrer">cppreference's section on function templates</a>を参照すると、インライン又はconstexprの

明示的なインスタンスは、インライン又はconstexprの

を使用することはできません

これらのトピックinlineconstexprは、別々のもので無関係のようです。なぜこの制限が存在するのですか?

+0

'inline'と' constexpr'の両方が関数の実際の*インスタンス*にならないことがありますか?もちろん、 "明示的*インスタンス化*"部分全体に反するものです。 –

答えて

1

逆の目的を果たすためです。

明示的なインスタンス化のポイントは、あなたが完全にあなたのheader fileでテンプレートを定義する必要がないようにあなたのプロジェクトが必要テンプレートの定義を提供するために、ソースファイルで、あります。

inlineのポイントは、ヘッダーの機能定義を許可することで、複数の翻訳単位にわたる複数の機能定義を1つにまとめることができます。

constexprコンパイラが実際にコンパイル時に呼び出すことができるようにするには、コンパイラが定義した関数を関数に含める必要があります。リンク時間はありませんconstexpr

inlineまたはconstexpr関数を明示的にインスタンス化するのは意味がありません。これらの関数テンプレートは、ヘッダーファイルで既に定義されている必要があり、したがってオンデマンドで暗黙的にインスタンス化できる必要があります。

関連する問題