1

私はちょうど今奇妙な問題に遭遇しました。

ソースコードは次のように単純で自明です。

#include <vector>
#include <iostream>
#include <functional>

using namespace std;
using namespace std::tr1;

template<class T_>
void show_size(T_ coll)
{   
    cout << coll.size();
}

int main()
{
    vector<int> coll;
    coll.push_back(1);

    show_size(ref(coll));

    return 0;
}

VC ++2010のレポート:

エラーC2039:'size':は'std :: tr1 :: reference_wrapper<_Ty>'のメンバーではありません

ご存知のように、reference_wrapperは自動的にその基になるタイプに変換できます。これがですvector<int>。なぜそのような単純なコードは無効なのですか?

4

1 に答える 1

1

を使用して明示的に要求されない限り、参照から減衰しないため、それは参照ラッパーの要点です。.get()

編集: ブースト参照ラッパーを標準のものと混同しないでください。ブースト 1 には実際には暗黙的な変換があります (ただし、ターゲットの機能は少し異なります)。

于 2010-11-30T16:09:59.657 に答える