class User;
template <typename T, int T::*member>
class Base {
};
class Used {
// Befriend everything there is.
friend class User;
template <typename T, int T::*member> friend class Base;
// The variable that should be accessible.
int i;
};
// error: ‘int Used::i’ is private
class User : public Base<Used, &Used::i> {
};
Y2xhc3MgVXNlcjsKCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBpbnQgVDo6Km1lbWJlcj4KY2xhc3MgQmFzZSB7Cgp9OwoKY2xhc3MgVXNlZCB7CgkvLyBCZWZyaWVuZCBldmVyeXRoaW5nIHRoZXJlIGlzLgoJZnJpZW5kIGNsYXNzIFVzZXI7Cgl0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgaW50IFQ6OiptZW1iZXI+IGZyaWVuZCBjbGFzcyBCYXNlOwoJLy8gVGhlIHZhcmlhYmxlIHRoYXQgc2hvdWxkIGJlIGFjY2Vzc2libGUuCglpbnQgaTsKfTsKCi8vIGVycm9yOiDigJhpbnQgVXNlZDo6aeKAmSBpcyBwcml2YXRlCmNsYXNzIFVzZXIgOiBwdWJsaWMgQmFzZTxVc2VkLCAmVXNlZDo6aT4gewoKfTsK