2012-02-14 22 views
0

テンプレート引数は、定数式(§C.5)、外部リンケージ(§9.2)を持つオブジェクトまたは関数のアドレス、またはメンバーへのオーバーロードされていないポインタ(§15.5) 。テンプレート引数として使用されるポインタは、&ooffの形式である必要があります。ooffはオブジェクトまたは関数の名前、形式はffです。ここで、ffは関数の名前です。メンバーへのポインターは、&XX::ooffの形式でなければなりません。ここで、ooffはメンバーの名前です。特に、文字列リテラルはテンプレート引数として受け入れられません。有効なテンプレート引数

これはstroustrupの本です。許可されているものと不可能なものの背後にあるロジックは何ですか?なぜ文字列リテラルが受け入れられないのですか?

私の理解では、コンパイラは引数の型を推測でき、その型の内部的にコードを生成できるはずです。ヘルプありがとう

+1

可能な複製[非文字列パラメータとして使用できない文字列リテラル](http://stackoverflow.com/questions/5547852/string-literals-not-allowed-as-non-type-template-parameters) –

+0

その投稿の男は、本自体よりもそれをうまく説明しました。それはまさに私が探していたものです。 – PnotNP

答えて

1

コンパイラは、非型テンプレート引数の型を推論しません。それらはプログラマによって指定されます。推論するものは何もありません。

コンパイラがコンパイル時に2つのポインタが等しいかどうかを確実に判断するための要件が​​あります。これは、クラステンプレート(関数テンプレート)の2つの使用が同じタイプ(関数)を参照するかどうかを判断するために必要です。

関連する問題