私はthis questionの公式の答えがdecltype
であるべきですトリガー機能のコンパイル。実際には宣言されているが定義されていない関数上のdecltype
は正当です。テンプレート化された関数のアドレスを取得してコンパイルをトリガーする必要がありますか?
次の質問は、関数のアドレスを取って関数のコンパイルをトリガーする必要がありますか? this exampleください:私がテストしてみた
template <typename T>
void foo(T&& x) { x.func(); }
int main()
{
auto bar = &foo<int>;
}
すべてのコンパイラをのようなエラーで失敗:非クラス型であるx
のメンバーfunc
ため
要求、
int
しかし、私がちょうどfoo
を定義し、それを宣言しなければ、コードはうまくコンパイルされます。関数のアドレスを取ってコンパイルする必要があるかどうかについて、誰かが私に公式ソースを提供できますか?
http://en.cppreference.com/w/cpp/language/definition%23One_Definition_Ruleによれば、「オブジェクトはそのアドレスが使用されているとodr-usedである」、および「オブジェクトまたは関数がodr-その定義はプログラムのどこかに存在しなければならず、その違反はリンク時のエラーです "。私はこれに答えるために関連する標準引用符を持っていません – KABoissonneault
@ KABoissonneault私はこれでOKです。それらの引用符の両方にhttp://en.cppreference.comを挙げることができれば、私はその公式を十分に考慮するでしょう。 –
@KABoissonneault [あなたが引用しているもの](http://en.cppreference.com/mwiki/index.php?title=cpp/language/definition&diff=prev&oldid=73909)は[Cubbi](http ://スタックオーバーフロー。com/users/273767/cubbi)私は彼に挨拶し、それについてのより多くの情報を得るための方法があることを望みます。 –