下面是一個小例子,觸發編譯錯誤:爲什麼這種可變參數模板參數替換失敗? (包固定前參數)
#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我必須承認,我真的可以使用一些關於你正在提出的觀點的更多細節:) –