On Sunday, 14 June 2015 at 10:04:35 UTC, John Colvin wrote:
On Sunday, 14 June 2015 at 09:46:56 UTC, JDemler wrote:
On Sunday, 14 June 2015 at 05:52:00 UTC, ketmar wrote:
oh, seems that i managed to make everything even less understandable...

Your code works perfectly and makes at least some sense to me. Thank you.

If i understand it correctly: __traits-time = templateinstatiation-time = pragma-time before ctfe-time?

Not really. These things are just (conceptually) done as/when they are required. If a template instantiation needs to do ctfe to calculate it's result, it does it. If some code running in ctfe needs the result of a template, it instantiates it.

The only distinction you have to think about is compile-time vs run-time, with the caveat that ctfe code is run as if it were run-time, but the result can be used at compile-time. If you imagine ctfe as being "compiling the function, running it, getting the answer and copying it in to your code" then even that distinction goes away and you just have ct vs rt.

If that is the case then i really do not get why my first example compiles and my second does not.

The compiler sees the pragma(msg, test(e)) and runs test(e).
If test uses __traits it does not work if it does not it works.

If __traits is just another ctfe function i dont see the difference.

Reply via email to