Parameterized enum does not work

Daniel Kozak via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jan 8 23:59:50 PST 2015


On Friday, 9 January 2015 at 07:52:50 UTC, Daniel Kozak wrote:
> On Friday, 9 January 2015 at 07:50:53 UTC, Daniel Kozak wrote:
>> On Friday, 9 January 2015 at 06:17:53 UTC, Andre wrote:
>>> Hi,
>>>
>>> Should following coding work?
>>>
>>> string lpad(ubyte length, long n)
>>> {
>>> 	import std.string: rightJustify;
>>> 	import std.conv: to;
>>> 	return rightJustify(to!string(n), length, '0');
>>> }
>>> 	
>>> enum lpad14(long n) = lpad(14, n);
>>>
>>> void main()
>>> {
>>> 	lpad14(123);
>>> }
>>>
>>> There is following error from dmd:
>>>
>>> source\app.d(12): Error: template app.lpad14 cannot deduce 
>>> function from argumen
>>> t types !()(int), candidates are:
>>> source\app.d(8):        app.lpad14(long n)
>>>
>>> Kind regards
>>> André
>>
>> What are you trying to do?
>
> OK I probably see it now :):
>
> import std.stdio;
>
> string lpad(ubyte length, long n)
> {
>     import std.string: rightJustify;
>     import std.conv: to;
>     return rightJustify(to!string(n), length, '0');
> }
>
> enum lpad14(long n) = lpad(14, n);
>
> void main()
> {
>     writeln(lpad14!(123));
> }

However this is only for compile time, if you want runtime 
version you need something like this:

import std.stdio;

string lpad(ubyte length)(long n)
{
     import std.string: rightJustify;
     import std.conv: to;
     return rightJustify(to!string(n), length, '0');
}

alias lpad14 = lpad!14;

void main()
{
     writeln(lpad14(123));
}


More information about the Digitalmars-d-learn mailing list