Looks like not actually a phobos issue, but dmd/__parameters one:
http://dpaste.1azy.net/a09afb96
---
interface Test
{
@property void setter(int x);
}
alias Type = typeof(&(Test.setter));
pragma(msg, Type);
static if (is(Type PT == __parameters))
{
pragma(msg, PT);
}
else
pragma(msg, "Error!");
void main() {}
---
Compilation output:
void function(int x) @property
Error!
---
Comment #2 by sludwig — 2013-04-29T02:55:41Z
__parameters seems to only with for actual function types and not for function pointers. Replacing "alias Type = typeof(&Test.setter);" with "alias Type = FunctionTypeOf!(Test.setter);" makes the bug example work. Similarly, replacing the first static-if in ParameterIdentifierTuple makes it work, but I'm unsure if this could break anything else:
line 832 traits.d:
--- static if (is(typeof!(func[0]) PT == __parameters))
+++ static if (is(FunctionTypeOf!(func[0]) PT == __parameters))
Comment #3 by public — 2013-04-29T03:07:32Z
Oh, neat, I have thought & and FunctionTypeOf are quite equivalent.
It can be categorized as Phobos/ParameterIdentifierTuple issue then.