Parameterized enum does not work

Andre via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jan 9 00:53:21 PST 2015


Thanks a lot.

Kind regards
André

On Friday, 9 January 2015 at 07:59:51 UTC, Daniel Kozak wrote:
> 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