template <typename T, T V>
struct rob
{
struct filler
{
filler() { value = V; }
};
static T value;
static filler fill;
};
template<typename T, T V>
T rob<T, V>::value;
template<typename T, T V>
typename rob<T, V>::filler rob<T, V>::fill;
struct A
{
private:
void f()
{
std::cout << "proof!" << std::endl;
}
};
template class rob<void(A::*)(), &A::f>;
int main()
{
A a;
(a.*rob<void(A::*)(), &A::f>::value)();
}