関数を引数として取る次の関数を考えてみましょう。
template <class Function = std::plus<int> >
void apply(Function&& f = Function());
std::plus<int>
適用されるデフォルトの関数は次のとおりです。std::plus<int>
は関数オブジェクトであり、すべてうまく機能します。
std::forward<int>
ここで、デフォルトの引数として渡したいと思います。std::forward<int>
は関数オブジェクトではありません。これは関数ポインタです。どうやってするか ?
template <class Function = /* SOMETHING */ >
void apply(Function&& f = /* SOMETHING */);