Re: Cannot convert from 'Type' to 'const Type&' error with templates
Alex Blekhman" <printf("%s@%s.%s", strrev("xfkt"), "yahoo", "com
<printf("%s@%s.%s", strrev("xfkt"), "yahoo", "com");> wrote:
template <
typename T,
typename Func,
typename Pred
compose_t<std::binder2nd<Pred>, Func>
mem_match(
const T& val,
Func fn,
Pred pr = std::equal_to<T>()
)
{
return compose(std::bind2nd(pr, val), fn);
}
The problem is that mem_match doesn't compile. Compiler
issues error C2783: could not deduce template argument for
'Pred'.
So, now I tried this one:
template <
typename T,
typename Func
compose_t<std::binder2nd<std::equal_to<T> >, Func>
mem_match(const T& val, Func fn)
{
return compose(
std::bind2nd(
std::equal_to<T>(), val), fn);
}
This compiles without any problem, however I cannot control
std::equal_to predicate from the outside of mem_match.
Try using both:
template <
typename T,
typename Func,
typename Pred
compose_t<std::binder2nd<Pred>, Func>
mem_match(
const T& val,
Func fn,
Pred pr // note no default value
)
{
return compose(std::bind2nd(pr, val), fn);
}
template <
typename T,
typename Func
compose_t<std::binder2nd<Pred>, Func>
mem_match(const T& val, Func fn)
{
return mem_match(val, fn, std::equal_to<T>());
}
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925