У меня есть этот код:
#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;
}
Цель состоит в том, чтобы передать объект-функтор с помощью reference_wrapper, чтобы избежать бесполезных вызовов транзакций с архитектурой. Я ожидаю следующий вывод:
F: 6
7
Он корректно работает с GCC >= 4.4.0, Visual Studio 2008 и с boost, заменяя пространство имен std:: tr1 с boost. Он не работает только с новой версией Visual Studio 2010 как Express Beta 2, так и Release Candidate.
Являются ли эти новые функции С++ прослушиваемыми vs2010? Или в коде есть некоторая ошибка или неправильное использование?