#include struct Foo { int a, b; }; void Add(Foo& x, int q) { x.a += q; x.b += q; } void Print(int); GUI_APP_MAIN { __BREAK__; Foo x; x.a = 10; x.b = 20; Add(x, rand()); Print(x.a); Print(x.b); } /* > Inlining a function doesn't necessarily imply replacing a reference type > with a value type. > > The problem is, a compiler looks at a UDT from the lowest level > possible. It has *no idea* what that type is supposed to be; not a clue. > All it sees are the low level operations on it. Trying to infer > identities and high level operations from that is akin to handing an AI > engine a few identities and expecting it to construct all kinds of > useful theorems from them. It ain't gonna happen. I am afraid my response might be considered a little bit offending, but I have to ask: Are we speaking about DMC++ here? :) In reality, I see no reason why good compiler could not optimize out a reference. Mirek */