Pregunta

Considere el siguiente código:

template<class T, class F>           struct X {};
template<class T, class F, T F::* m> struct Y {};

struct Foo {
    int member;
    typedef X<int, Foo>               x_type; // works well
    typedef Y<int, Foo, &Foo::member> y_type; // ERROR
};

typedef Y<int, Foo, &Foo::member> y_type2; // OK

¿Por qué el compilador genera un error? (VS2008)


New

He publicado este error en connect.microsoft.com .

¿Fue útil?

Solución 2

Este es un error

Otros consejos

Creo que está relacionado de alguna manera con que Visual C ++ no sabe el tamaño del puntero al miembro en ese momento. Compruebe este informe de defectos por ejemplo ( here es otro problema con el puntero a la variable miembro). Creo que encontró un error más en Visual C ++ y debería informarse a connect.microsoft.com.

Me encontré con el mismo problema. El soporte para los argumentos de la plantilla de puntero a miembro todavía está limitado en VC ++ (consulte informe de error ) .

En mi caso, podría solucionarlo utilizando una función de plantilla i.s.o. una clase de plantilla:

template< typename Class > struct CMemberDumper {
    Class& object;
    template< typename M > void visit_member( M C::*pm ) {
       std::cout << object.*pm;
    }
};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top