Я не могу получить доступ к указателю на участника.Почему?

StackOverflow https://stackoverflow.com/questions/1802204

Вопрос

Рассмотрим следующий код:

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

Почему компилятор генерирует ошибку?(VS2008)


Новое

Я опубликовал эту ошибку на connect.microsoft.com.

Это было полезно?

Решение 2

Это настоящий ошибка

Другие советы

Я думаю, что это как-то связано с тем, что Visual C ++ не знает размер указателя на элемент в этот момент.Проверить это например, отчет о дефекте (здесь это еще одна проблема с указателем на переменную-член).Я думаю, что вы обнаружили еще одну ошибку Visual C ++, и о ней следует сообщить по адресу connect.microsoft.com.

Я наткнулся на ту же проблему.Поддержка аргументов шаблона указателя на элемент по-прежнему ограничена в VC ++ (см. отчет об ошибке).

В моем случае я мог бы обойти это, используя функцию шаблона i.s.o.шаблонный класс:

template< typename Class > struct CMemberDumper {
    Class& object;
    template< typename M > void visit_member( M C::*pm ) {
       std::cout << object.*pm;
    }
};
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top