Oh, that's interesting. You can fix it by specifying the template instantiation to use with fold<int>(......). I'm not sure exactly how the lambda ends up converting to a std::function. If you are okay with losing some information in the type signature you could also use a type parameter for the function type, making the function work with any 'callable' type.
Oh, that's interesting. You can fix it by specifying the template instantiation to use with
fold<int>(......)
. I'm not sure exactly how the lambda ends up converting to astd::function
. If you are okay with losing some information in the type signature you could also use a type parameter for the function type, making the function work with any 'callable' type.Ah, didn't think to try
fold<int>(......)
. I'm also no longer near a compiler, but I'll give both of those options a go later on.You can also add an additional template parameter BinaryOp like this:
See the code. And its also slightly faster since std::function has some overhead.
You can have a look at std::accumulate or std::reduce, they work fairly similar and are part of the STL ;-)
Happy coding
Ah, thanks! I like that better, I think - good to know about std:: function.
I had come across the STL options but this exercise was specifically to get there myself :)