On Fri, Aug 6, 2010 at 11:43, Rory Mcguire <rjmcgu...@gm_no_ail.com> wrote:
> I've been trying to make a template for this but it seems that dmd still > won't allow me to get the parameters of the constructors. dmd Seems to > think > that I'm trying to use it as a property. > > > void main() { > foreach (m; __traits(getOverloads, A, "__ctor")) { > pragma(msg, m.stringof); // it thinks I'm calling m > } > } > > constructors.d(34): Error: constructor constructors.A.this (int x) is not > callable using argument types () > This is my new once-a-day bug :( Using a function alias, and being unable to call properties on it, because DMD thinks I'm calling it. Man, it's no property, just a name! Anyway, just pragma(msg, m) works, strangely. I think I found a way to use m, somewhat: void main() { foreach (m; __traits(getOverloads, A, "__ctor")) { pragma(msg, m); // it thinks I'm calling m typeof(&m) tmp = &m; writeln( (ParameterTypeTuple!tmp).stringof); // (int), (double), (string) writeln( (ParameterTypeTuple!m).stringof); // (int), (int), (int) writeln( typeof(&m).stringof); // A function(int x), A function(double x), A function(string s) } } using ParameterTypeTuple!m directly does not differentiate the m's. But using a temporary pointer, it seems to work. Oh and I even get the arguments names ! Philippe