On 10/26/2017 12:14 PM, jmh530 wrote:
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));
}
One additional thing I noted is that I wanted to add attributes, not set
them. I'd like some simpler primitives like AddPure, RemovePure etc. BTW
the PR is https://github.com/dlang/phobos/pull/5470. -- Andrei