use template function without assignment
JS
js.mdnq at gmail.com
Tue Jul 30 00:55:30 PDT 2013
On Tuesday, 30 July 2013 at 07:12:11 UTC, Namespace wrote:
> 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?
This is useless. 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);
where Pragma custom formats the error or info message with the
location where the message was initiated.
Sticking it in a ctor will only print a message from that
location.
More information about the Digitalmars-d-learn
mailing list