2012-03-06 11 views
9

std::refを使用する正しい方法は何ですか?私はVS2010で次のコードを試してみましたが、それがコンパイルされません:std :: refの使い方は?

#include <vector> 
#include <algorithm> 
#include <iostream> 
#include <functional> 
using namespace std; 
struct IsEven 
{ 
    bool operator()(int n) 
    { 
     if(n % 2 == 0) 
     { 
      evens.push_back(n); 
      return false; 
     } 

     return true; 
    } 

    vector<int> evens; 
}; 
int main(int argc, char **argv) 
{ 
    vector<int> v; 
    for(int i = 0; i < 10; ++i) 
    { 
     v.push_back(i); 
    } 

    IsEven f; 
    vector<int>::iterator newEnd = remove_if(v.begin(), v.end(), std::ref(f)); 
    return 0; 
} 

エラー:

C:\プログラムファイル(x86の)は、MicrosoftのVisual Studio \ 10.0 \ VCの\に\ xxresultが含まれる(28 ):エラーC2903: '結果':シンボルはクラステンプレートでも関数テンプレートでもありません。

c:\ program files(x86)\ microsoft visual studio 10.0 \ vc \ include \ xxresult(28):エラーC2143:構文エラー: ';'がありません「<」

プラスもう少し前に...

+0

それはでコンパイルg ++(4.6と4.8の両方)。 – kennytm

+0

@nabulke:C++ 11でも?私はこれがうまくいくと思った。 – Asha

答えて

8

std::refのVisual C++ 10.0実装にバグまたは一連のバグがあります。

これは、Visual C++ 11で修正されていると伝えられています。私のearlier question about itを見てください。 Microsoftの

STLはthusly答えた:「我々はすでにそれを修正した、と修正はVC11 RTMで利用できるようになります(ただし、この修正は、VC11ベータ版に取得していない。)」

4

私はVS2010と同じコンパイルエラーを受け取ったとstd::unary_functionから継承して、それを修正:

struct IsEven : std::unary_function<int, bool> 

私はresultに、これが原因と考えられエラーメッセージに表示されます。

template <class Arg, class Result> 
    struct unary_function { 
    typedef Arg argument_type; 
    typedef Result result_type; 
    }; 

はEDIT::

はVS2010のバグに関するCheers and hth. - Alfからの回答を参照してください。私はstd::refは、VS2010で、unary_functiontypedef Sに依存していることだけを推測することができます

+0

これはもう必要ではないはずだ。バグを報告してください。 – pmr

+0

これを一度にコンパイルする..興味深い.. – Asha

関連する問題