Я не могу получить доступ к указателю на участника.Почему?
-
05-07-2019 - |
Вопрос
Рассмотрим следующий код:
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;
}
};
Не связан с StackOverflow