私はこのコードを持っています:
#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、およびstd::tr1名前空間をboostに置き換えることでboostで正しく機能します。ExpressBeta2とリリース候補の両方の新しいVisualStudio2010では機能しません。
この新しいC++機能はvs2010でバグがありますか?または、コードに間違いや誤用がありますか?