Pergunta

Considere o seguinte 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 que o compilador gera erro? (Vs2008)


Novo

Eu postei este bug para Connect.microsoft.com.

Foi útil?

Solução 2

Isto é um incomodar

Outras dicas

Eu acho que está relacionado de alguma forma com que o visual c ++ não sabe o tamanho do ponteiro para o membro nesse ponto. Verificar isto Relatório de defeito, por exemplo (aqui é outro problema com o ponteiro da variável de membro). Eu acho que você encontrou mais um bug visual em C ++ e deve ser relatado para conectar.microsoft.com.

Eu tropecei no mesmo problema. O suporte para argumentos de modelo ponteiro para membro ainda é limitado em VC ++ (ver relatório de erro).

No meu caso, eu poderia contorná -lo usando uma função de modelo ISO A Classe de modelo:

template< typename Class > struct CMemberDumper {
    Class& object;
    template< typename M > void visit_member( M C::*pm ) {
       std::cout << object.*pm;
    }
};
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top