$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Dirk Gerrits (dirkg_at_[hidden])
Date: 2002-05-23 05:35:59
----- Original Message -----
From: "Yitzhak Sapir" <yitzhaks_at_[hidden]>
> boost::ref is a class generator that creates a reference wrapper.
> operator() is not defined for the wrapper.
Suppose you have an object r of a type generated by boost::ref for an
object of type T. (That's boost::reference_wrapper<T> right?)
Now let's say we have this line of code:
r();
boost::reference_wrapper<T> has no operator() but it does have an
implict conversion to T&. If that type T does have an operator() taking
no arguments, wouldn't the above code be perfectly legal?
I have tried the following on my compiler and it worked perfectly:
#include <boost/function.hpp>
#include <boost/ref.hpp>
void func(boost::function0<void> f) { f(); }
struct functor
{
void operator()() {std::cout << "It works!" << std::endl; }
};
int main()
{
functor f;
func(f);
func(boost::ref(f));
}
Output:
It works!
It works!
If this doesn't work for you, then is my logic (and my compiler) flawed?
Dirk Gerrits