On Monday, 29 September 2014 at 10:49:53 UTC, Andrei Alexandrescu wrote:
Back when I've first introduced RCString I hinted that we have a larger strategy in mind. Here it is.

The policy is a template parameter to functions in Phobos (and elsewhere), and informs the functions e.g. what types to return. Consider:

auto setExtension(MemoryManagementPolicy mmp = gc, R1, R2)(R1 path, R2 ext)
if (...)
{
    static if (mmp == gc) alias S = string;
    else alias S = RCString;
    S result;
    ...
    return result;
}


How about having something like ResourceManagementPolicy.infer, which under the hood could work something like below... you could combine it with your original suggestion, with an overridable MemoryManagementPolicy(just removed it to make the example shorter)

auto setExtension(R1, R2)(R1 path, R2 ext)
if (...)
{
static if(functionAttributes!(__traits(parent, setExtension)) & FunctionAttribute.nogc)
      alias S = RCString;
    else
      alias S = string;
    ...
    return result;
}

Daniel N

Reply via email to