On Thursday, 26 October 2017 at 16:06:28 UTC, jmh530 wrote:
On Thursday, 26 October 2017 at 15:47:03 UTC, Andrei Alexandrescu wrote:

s/less hideous/even more awesome/

No need to be testy :o).

I noticed there's no way to say "just leave linkage as is". I tried SetFunctionAttributes!(typeof(&impl), null, FunctionAttribute.pure_) and SetFunctionAttributes!(typeof(&impl), "", FunctionAttribute.pure_) but neither worked. Should I file a bug?


Andrei

How about:

SetFunctionAttributes!(typeof(&impl), functionLinkage!(&impl), FunctionAttribute.pure_)

Or we can just add in additional overloads like:

template SetFunctionAttributes(T, uint attrs)
    if (isFunctionPointer!T || isDelegate!T)
{
alias SetFunctionAttributes = FunctionTypeOf!(SetFunctionAttributes!(T, functionLinkage!T, attrs));
}

template SetFunctionAttributes(T, uint attrs)
    if (is(T == function))
{
alias SetFunctionAttributes = FunctionTypeOf!(SetFunctionAttributes!(T*, attrs));
}

template SetFunctionAttributes(T, string linkage)
    if (isFunctionPointer!T || isDelegate!T)
{
alias SetFunctionAttributes = FunctionTypeOf!(SetFunctionAttributes!(T, linkage, functionAttributes!T));
}

template SetFunctionAttributes(T, string linkage)
    if (is(T == function))
{
alias SetFunctionAttributes = FunctionTypeOf!(SetFunctionAttributes!(T*, linkage));
}

Reply via email to