namespace; include rt; // a static function of a struct can be called by its bare name inside the struct's // methods and static functions, as a struct constant can. the struct's own function // wins over a top-level one of the same name; outside the struct only S.name reaches it. int lim() { return 100; } int base() { return 7; } struct S { int v; static int lim() { return 3; } static int twice(int x) { return x * 2; } static int both() { return lim() + twice(4); } int get() { return lim() + this.v; } int scaled() { return twice(this.v) + later(); } int top() { return base(); } static int later() { return 1000; } } int main() { S s; s.v = 5; rt.put_n(S.lim()); rt.put_c(32); // 3 rt.put_n(lim()); rt.put_c(32); // 100, the global one rt.put_n(S.both()); rt.put_c(32); // 3 + 8 rt.put_n(s.get()); rt.put_c(32); // 3 + 5 rt.put_n(s.scaled()); rt.put_c(32); // 10 + 1000, a static function declared later rt.put_n(s.top()); rt.put_c(10); // 7, a global that the struct has no member of return 0; }