Указатели на переменные-члены в шаблонных классах

Составил вот такой минимальный пример:

#include <cstdlib>
#include <iostream>

template <typename T> class Point {
public:
  T x;
  T y;

  static T Point<T>::*arr[2];
};

template <typename T>
T Point<T>::*Point<T>::arr[2] = {
    &Point<T>::x,
    &Point<T>::y,
};

int main() {
  Point<int> p{5, 10};

  auto a = p.arr[0];
  auto b = p.arr[1];

  std::cout << p.*a << std::endl;
  std::cout << p.*b << std::endl;

  return EXIT_SUCCESS;
}

Собственно по вопросам:

  1. Что это за тип T Point<T>::* (я, наприме, не могу привести его к const void *)?

  2. Взятие указателя на переменную-член доступно только в шаблонах?


Ответы (0 шт):