ここでは、コンパイルエラーをトリガ最小限の例です:なぜこの可変的なテンプレートパラメータの置換に失敗しますか? (パックの前に固定引数)
#include <utility>
void foo(int, double, int)
{}
template <class... Args>
void post_forwarder(void(*fun)(Args..., int), Args&&... aArgs)
{
fun(std::forward<Args>(aArgs)..., 5);
}
int main()
{
post_forwarder(foo, 6, 6.1); // Compilation error on instantiation
return 0;
}
私は問題は可変引数テンプレートパラメータが固定int型のパラメータの前に関数型で展開されているという事実に関係している疑いがありますしかし、それが事実なら、私はそれのための良い根拠を見つけることができません。
クラン3.6で報告されるエラーは次のとおりです。
error: no matching function for call to 'post_forwarder'
note: candidate template ignored: failed template argument deduction
あなたはエラーを投稿できますか?それは役に立つだろう。 – lodo
さて、 'Args && ... 'と推測された' Args ... '関数ポインタへの転送は良い計画ではありません。あなたがそれを知っていることを確認するだけです。 – Yakk
@ Yakk私は、あなたが上げようとしているポイントについて、もっと詳しく述べることができることを認めなければなりません:) –