Andrei Alexandrescu wrote: > Rainer Deyke wrote: >> So, what's the syntax for user-defined value types that are passed by >> reference going to be? ref struct? opPass? > > No need for new syntax. T[new] is a struct that has a pointer inside.
Without new syntax, there's no way to distinguish between assignment and argument passing. Either 'T[new]' is a value type or 'T[new]' is a reference type. Or 'T[new]' is a messy hybrid, like arrays in D1. There is no way to create a *clean* hybrid with the language facilities in D2. If 'T[new]' has reference semantics, then assignment rebinds the reference. This actually works out fairly well, except for the problem that 'T[new]' has reference semantics. Preferred syntax: assert(is(typeof([1, 2, 3]) == int[new])); int[new] a = [1, 2, 3]; // Rebinds. Syntax for people who insist that array literals should be constant: assert(is(typeof(create_array(1, 2, 3)) == int[new])); int[new] a = create_array(1, 2, 3); // Rebinds. -- Rainer Deyke - rain...@eldwood.com