Immutable and unique in C#

Daniel Murphy yebblies at nospamgmail.com
Tue Nov 13 15:47:44 PST 2012


"Walter Bright" <newshound2 at digitalmars.com> wrote in message 
news:k7t125$7on$1 at digitalmars.com...
>
> A Unique!T can only be initialized by:
>
>    1. a destructive read of another instance of Unique!T
>    2. an expression that can be determined to generated an isolated 
> pointer
>
> #2 is the interesting bit. That requires some compiler support, sort of 
> like:
>
>      __unique(Expression)
>
> which will allow it through if Expression is some combination of new, pure 
> functions, and other Unique pointers.
>

This is somewhat possible in the current language.  The makeU function can 
be an arbitrarily complicated strongly pure function.

void funcTakingUnique(U, T...)(U function(T) pure makeU, T args) if 
(is(typeof({ immutable i = makeU(args) }) // If it converts to immutable, it 
is either unique or immutable
{
    auto unique = makeU(args); // guaranteed to be unique/immutable
}

class A
{
    this(int a, string b) {}
}

void main()
{
    funcTakingUnique!A(A function(int a, string b) { return new A(a, b); }, 
4, "Awesome");
} 




More information about the Digitalmars-d mailing list