Подтвердить что ты не робот

Указатель на член класса в качестве параметра шаблона

Возможно ли иметь параметр шаблона типа non-type, который на самом деле является указателем на член класса? Я хочу сделать следующее:

struct Person {
  Dog dog;
};

template <?? ptr>
struct Strange {
  // ...
};

typedef Strange<&Person::dog> weird;

Моя работа до сих пор заставляет меня поверить, что ничего подобного не возможно, но мне любопытно, может ли кто-нибудь сказать об этом.

4b9b3361

Ответ 1

Из стандарта:

Шаблон-параметр непигового типа должен иметь один из следующих (необязательно cv-qualified) типов:

  • интегральный или перечисляемый тип,
  • указатель на объект или указатель на функцию,
  • ссылка на объект или ссылку на функцию,
  • указатель на член.

Итак, это разрешено и, похоже, работает на g++ следующим образом:

template <Dog Person::*ptr>
struct Strange { ... };