On Tuesday, 30 July 2013 at 20:34:32 UTC, Ali Çehreli wrote:
On 07/30/2013 12:09 PM, JS wrote:

> I already stated why this is not a proper example, I'm not
using Pragma
> in run time code(for lack of a better term).
>
> module main;
>
> import std.stdio;
>
>
> template Pragma(alias amsg)
> {
>      void Pragma(string file = __FILE__)
>      {
>          pragma(msg, amsg);
>      }
> }
>
> template t()
> {
>      Pragma!("help, this does not work!!!!!!!!!");
> }
>
> void main()
> {
>      enum msg = "hello";
>      Pragma!msg;
>      t!();
> }

Thank you. Now we have something to work on. The program above produces the following error:

Error: no identifier for declarator Pragma!"help, this does not work!!!!!!!!!"

The error is fixed by adding a mixin:

    mixin Pragma!("help, this does not work!!!!!!!!!");


Or just assigning it to enum... both are not great solutions...

Despite another error it actually works:

hello
help, this does not work!!!!!!!!!    <-- IT WORKED
Error: t!() has no effect

The second error is fixed by another mixin:

    mixin t!();

Perhaps the example is too simplistic. Still, let's stay with it for further issues.

Ali

I think that such behavior should not be an error but possibly a warning, if at all.

And if you cared to read what I initially posted you would realize I already explained the same thing. The example maybe more clear but I stated, maybe in some convoluted and jumped way, that Pragma doesn't work *in* templates..

"When I try to use void instead of string and do something like

Pragma!(msg)

I get an error that the template has no effect."

and later

"It's goal is to debug templates and essentially
just wrapping pragma to supply the __FILE__ info automatically.

e.g., instead of having to do

pragma(msg, __FILE__~amsg);

I want to do Pragma!(amsg);
"

Reply via email to