cppreferenceから、std::apply(add_generic, ...)
への呼び出しがコンパイルに失敗する理由を教えてください。それを修正する方法はありますか?エラーとstd :: applyが汎用関数で失敗するのはなぜですか?
#include <iostream>
#include <tuple>
int add(int first, int second)
{
return first + second;
}
template<typename T>
T add_generic(T first, T second)
{
return first + second;
}
int main()
{
std::cout << std::apply(add, std::make_tuple(1,2)) << '\n';
// template argument deduction/substitution fails
std::cout << std::apply(add_generic, std::make_tuple(2.0f,3.0f)) << '\n';
}
それはfails:
[x86-64 gcc 7 (snapshot)] error: no matching function for call to 'apply(, std::tuple)' [x86-64 gcc 7 (snapshot)] note: couldn't deduce template parameter '_Fn'
何を得るのエラーを見なければ、私はそれができたのですよね引数型 'T'を適切に推論できないためですか? –
コードをどのようにコンパイルしていますか? 'std :: apply'は' C++ 17'を必要とします、あなたのコンパイラは 'C++ 17'をサポートしていますか? – Rogus
'add_generic'は関数ではなく、テンプレートです。タイプを持たないものからタイプを推論することはできません。 – chris