On Monday, 29 July 2013 at 23:09:20 UTC, JS wrote:
I have created a template Pragma that emulates pragma but better, the problem is that I have to assign it to something which is very redundant in my code:

enum temp = Pragma!(msg)

e.g.,

template Pragma(alias amsg)
{
    string Pragma(string file = __FILE__)
    {
        pragma(msg, amsg);
        return "";
    }
}

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. It does have an effect but what it is complaining about is exactly what I want.

I've tried all kinds of combinations(mixins work but I then can't ise __FILE__) and nothing works. Maybe someone has an idea.

You could call your template in a static CTor:

----
import std.stdio;

template Pragma(alias amsg)
{
    void Pragma(string file = __FILE__)
    {
        pragma(msg, amsg);
    }
}

static this() {
        Pragma!("foo")();
}

void main()
{
        writeln("Hello world!");
}
----

Maybe this helps?

Reply via email to