class myClass {
int y; // Regular variable
myClass() : x (1) {}
void foo1 () {x.x++; y++;} // This can change x
void foo2 () {x.x--; y--;} // This shouldn't be able to change x
// I want it to throw a compile error
class subClass {
friend void myClass::foo1() ; // This must come after the declaration of foo1
int x ; // private
public:
subClass (int x) : x (x) { }
int read_x() const { return x ; }
} x ;
};
Y2xhc3MgbXlDbGFzcyB7CiAgICBpbnQgeTsgIC8vIFJlZ3VsYXIgdmFyaWFibGUKICAgIG15Q2xhc3MoKSA6IHggKDEpIHt9CiAgICB2b2lkIGZvbzEgKCkge3gueCsrOyB5Kys7fSAvLyBUaGlzIGNhbiBjaGFuZ2UgeAogICAgdm9pZCBmb28yICgpIHt4LngtLTsgeS0tO30gLy8gVGhpcyBzaG91bGRuJ3QgYmUgYWJsZSB0byBjaGFuZ2UgeAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSSB3YW50IGl0IHRvIHRocm93IGEgY29tcGlsZSBlcnJvcgogICAgY2xhc3Mgc3ViQ2xhc3MgewogICAgICBmcmllbmQgdm9pZCBteUNsYXNzOjpmb28xKCkgOyAvLyBUaGlzIG11c3QgY29tZSBhZnRlciB0aGUgZGVjbGFyYXRpb24gb2YgZm9vMQogICAgICBpbnQgeCA7IC8vIHByaXZhdGUKICAgIHB1YmxpYzoKICAgICAgc3ViQ2xhc3MgKGludCB4KSA6IHggKHgpIHsgfQogICAgICBpbnQgcmVhZF94KCkgY29uc3QgeyByZXR1cm4geCA7IH0KICAgICAgfSB4IDsKfTs=