Какой тип имеет указатель на член класса? Другими словами, что нужно подставить здесь, чтобы работало? Очевидное int* не работает.
struct X {
int x = 0;
};
template<class T, T value>
auto foo() { return *value; }
int main() {
std::cout << foo</* какой тип? */, &X::x>();
}
Указатель на поле класса должен иметь тип int X::*, а чтобы приведенный код работал надо еще создать экземпляр класса X:
#include <iostream>
struct X
{
int x = 0;
};
template<auto x_pointer, typename x_Class>
auto foo(x_Class & obj)
{
return obj.*x_pointer;
}
// или так
template<int X::* x_pointer>
auto foo(X & obj)
{
return obj.*x_pointer;
}
int main()
{
X x{};
std::cout << foo<&X::x>(x);
}
online compiler
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости