On Friday, 28 June 2013 at 20:50:55 UTC, John Colvin wrote:
On Friday, 28 June 2013 at 13:55:54 UTC, Namespace wrote:
And why don't you call the function from your clone function?

Because the body of the new function needs to see the parameters as known at compile-time.

Maybe this could help you: http://dpaste.1azy.net/fork/597affd2
I used it to generate my own rvalue functions because of the lack of rvalue references.

Thanks, that was helpful for a few hints, but it doesn't fix this particular problem.

Oh, hey! I remember participating in writing some of that :)

Yeah, with traits, you can get enough info to extract all the information you want about the function to redeclare it any way you want.

The only thing you *can't* get is... the body!

If you have access to the source code of the function, you could redeclare it as a token string? eg:

before:

int foo(int a)
{
    return a+1;
}

after:
enum fooString =
q{
    return a+1;
};

int foo(int a){mixin(fooString);}
int foo()(int a){mixin(fooString);}

Yeah... not a great solution.

--------

The only way I could see it happen would be with a compile __trait ?

Does the compiler even have the info, or is it completely obliterated after the lex phase?

The compiler *should* have the info, since it can pinpoint the coordinates of compilation errors.

But I wouldn't know too much.

Reply via email to