Douglas Gregor wrote:
> We've discussed making boost::ref/boost::cref work for arbitrary
> functions
> objects before. I just committed a version of ref.hpp that supports
> this
> ability to the sandbox. With this code, you can write:
>
>   std::transform(c.begin(), c.end(), out, boost::ref(f));
>
> or, if you don't want the return type deduced, specify it as in
> Boost.Bind:
>
>   std::transform(c.begin(), c.end(), out, boost::ref<float>(f));
>
> Features of this implementation:
>   - Return type deduction (discussed below)
>   - Argument type deduction  (discussed below)
>   - Able to handle function objects that have multiple arities (e.g.,
> can be
> invoked with 0 or 2 arguments)

That's very nice!

[...]
> ------Compatibility------
> This version of ref.hpp is backwards-compatible with the existing
> version of
> ref.hpp on a compiler that can handle the new ref.hpp (needs partial
> specialization and proper SFINAE handling). At some point I'll write a
> stripped-down version that other compilers can handle.

I tried to do this once and failed. It's hard to make operator() work on
deficient compilers (esp. the zero-arg version that is not a template)
without breaking ref(x) where x is not a function object.

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to