I have this code:

#include <iostream>
#include <functional>

struct A
{
    int operator()(int i) const {
        std::cout << "F: " << i << std::endl;
        return i + 1;
    }
};

int main()
{
    A a;
    std::tr1::function<int(int)> f = std::tr1::ref(a);
    std::cout << f(6) << std::endl;
}

The aim is to pass the functor object by a reference_wrapper, in a way to avoid useless copy costructor calls. I expect the following output:

F: 6
7

It works correctly with GCC >= 4.4.0, Visual Studio 2008 and with boost by substituting std::tr1 namespace with boost. It only doesn't work with the new Visual Studio 2010 both Express Beta 2 and Release Candidate.

Are this new C++ features bugged in vs2010? Or there is some mistake or misuse in the code?

Edit
Report