use template function without assignment

JS js.mdnq at gmail.com
Tue Jul 30 00:02:49 PDT 2013


On Tuesday, 30 July 2013 at 01:19:23 UTC, Meta wrote:
> On Tuesday, 30 July 2013 at 01:06:39 UTC, Meta wrote:
>> Does this code do what you want, or are there other 
>> requirements as well?
>>
>> void Pragma(alias amsg)(string file = __FILE__)
>> {
>> 	pragma(msg, amsg);
>> }
>
> Actually, sorry, that's the exact same code, just with some 
> syntactic sugar. To avoid the "expression has no effect" 
> problem, you could use an alias instead of an enum. You're 
> getting the error when you try to use pragma in the "global" 
> scope, right?
>
> void Pragma(alias amsg)(string file = __FILE__)
> {
>     pragma(msg, amsg);
> }
>
> alias temp = Pragma!("test");
>
> In general, D doesn't have top-level expressions like what I 
> think you want to do here. Maybe somebody else knows a way to 
> work around that.

If I use enum or alias they both have the same problem(The 
annoying mandatory assignment).

I see the reason why it does it but I don't know it because in 
this case I do not want an effect. (pragma has no "effect" which 
is what I'm trying to emulate... works well except for that 
annoying quirk of having to assign it to something).

BTW, is

void Pragma(alias amsg)(string file = __FILE__)

short for

template Pragma(alias amsg)
{
  void Pragma(string file = __FILE__)

or is there some real difference?

I could potential do something like

template Group(alias G1)
{
     void Group(alias G2)(int s)
     {
         writeln(s);
     }
}

Group!("x")("y")(3); // doesn't work,
Group!("x")!("y")(3); // doesn't work



More information about the Digitalmars-d-learn mailing list