# Demonstrating the interaction between 'role_stream' and 'guard'. set g2_trace_ftions 1 class Owner { role_regular role_stream protected: guard char* name= John } class Animal { role_regular role_stream f init() { ref Animal:CTOR } protected: guard char* name= "Fido" guard Owner* owner= 0 } f int main() {@ Animal a1; Animal a2= a1; Animal a3; a3= a1; a1.init(); a2.init(); a3.init(); printf("a1= %s\n", a1.get_name()); printf("a2= %s\n", a2.get_name()); printf("a3= %s\n", a3.get_name()); Owner o1; a1.set_owner(&o1); cout << "a1= " << a1 << endl; cout << "a2= " << a2 << endl; cout << "a3= " << a3 << endl; return 0; @} c_hdr animals animals.h { sys_inc stdio stdlib iostream ref Owner:H Animal:H } c_src animals animals.cc { my_inc animals ref Owner:CC Animal:CC main:CC }