> The ugly solution would be to do this:
> void test (ref int a) { }
> void main () { writeln(typeof(&test).stringof); }
> Which will print: "void function(ref int a)" and then parse out what you need.

If you're referring to using mixin() to parse the signature, I've already 
thought
of that, but it won't work because if the type of any parameter is a 
user-defined
type, it will be inaccessible outside the module that provides this facility. 
This
feature will require compiler and/or language modification(s); I don't believe 
you
can add the storage-class feature correctly with the current language (though
please correct me if I'm wrong).



> Let me see if I get this straight (correct me if I'm wrong in understanding 
> this).
> So you mean we would have e.g. ref as a type constructor:
ref int x;

Yes.

> The problem with this is that now you're functions look like this:
> foo(int x) { }

No... why? ref would be just like const -- so your parameter's data type could 
be
ref(const(string)). Why do you say the functions remove the type constructor 
from
the header?

[This is a bit unrelated, but while we're on the topic of documenting code 
through
ref/out: I think it would be better if the language required the "ref" and "out"
keywords on passing the parameters, like C# does... it prevents a lot of bugs 
that
can happen when a function's header is changed, since now the caller code won't
compiler, instead of compiling but working potentially incorrectly.)

I actually noticed a different problem with treating storage classes as type
constructors: while "ref" and "lazy" would work well, "out" would make no sense 
as
a type constructor, so this solution probably won't work at all.


Does anyone have any ideas on how to get storage classes to work correctly with
ParameterTypeTuple, whether or not it's a dirty solution (so long as the 
solution
works)?

Reply via email to