Pregunta

Me encontró un problema raro en este momento.

El código fuente es simple y evidente por sí mismo como sigue:

#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;
}

El VC ++ informes de 2010:

error C2039: 'size': no ??es un miembro de 'std :: TR1 :: reference_wrapper <_Ty>'

Como sabemos, reference_wrapper puede convertir automáticamente a su tipo subyacente, aquí es vector<int>. ¿Por qué es tan simple código no válido?

¿Fue útil?

Solución

No, no lo que es el punto central de la envoltura de referencia, ya que no se descompone de la referencia, salvo que se solicite explícitamente el uso puede .get()

Edit: no se mezclan hasta la envoltura de referencia aumenta con el estándar, el impulso que uno realmente tiene la conversión implícita (pero la funcionalidad de destino es un poco diferente bit)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top