www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - auto type for defaulted arguments? [Repost]

reply "bearophile" <bearophileHUGS lycos.com> writes:
(This is an extended repost of a message that I have put in 
D.learn.)

Sometimes I have code like this:

struct VeryLongNamedStruct {}
void foo(in VeryLongNamedStruct x = VeryLongNamedStruct(1)) {}
void main() {}

Or even:

void bar(in TupleFoo x = TupleFoo(TupleBar(2), TupleSpam(3))) {}

In those cases something I'd like to use "auto" in the function 
signature for the arguments that have a default value:

void foo(in auto x = VeryLongNamedStruct(1)) {}

Do you like? Is it safe enough? Is it useful enough? Is it too 
much work to implement?

A bit more complex case:

void spam(T)(const x = Foo!T(4)) {}

Bye,
bearophile
Jun 27 2013
next sibling parent "Maxim Fomin" <maxim maxim-fomin.ru> writes:
On Thursday, 27 June 2013 at 17:42:14 UTC, bearophile wrote:
 (This is an extended repost of a message that I have put in 
 D.learn.)

 Sometimes I have code like this:

 struct VeryLongNamedStruct {}
 void foo(in VeryLongNamedStruct x = VeryLongNamedStruct(1)) {}
 void main() {}

 Or even:

 void bar(in TupleFoo x = TupleFoo(TupleBar(2), TupleSpam(3))) {}

 In those cases something I'd like to use "auto" in the function 
 signature for the arguments that have a default value:

 void foo(in auto x = VeryLongNamedStruct(1)) {}

 Do you like? Is it safe enough? Is it useful enough? Is it too 
 much work to implement?

 A bit more complex case:

 void spam(T)(const x = Foo!T(4)) {}

 Bye,
 bearophile

Alias supposed to be used for such cases, but auto can be used in paramenters too.
Jun 27 2013
prev sibling next sibling parent Nick Sabalausky <SeeWebsiteToContactMe semitwist.com> writes:
On Thu, 27 Jun 2013 19:58:58 +0200
"Maxim Fomin" <maxim maxim-fomin.ru> wrote:

 On Thursday, 27 June 2013 at 17:42:14 UTC, bearophile wrote:
 (This is an extended repost of a message that I have put in 
 D.learn.)

 Sometimes I have code like this:

 struct VeryLongNamedStruct {}
 void foo(in VeryLongNamedStruct x = VeryLongNamedStruct(1)) {}
 void main() {}

 Or even:

 void bar(in TupleFoo x = TupleFoo(TupleBar(2), TupleSpam(3))) {}

 In those cases something I'd like to use "auto" in the function 
 signature for the arguments that have a default value:

 void foo(in auto x = VeryLongNamedStruct(1)) {}

 Do you like? Is it safe enough? Is it useful enough? Is it too 
 much work to implement?


I've noticed a need for that, too.
 but auto can be used in paramenters too.

It can? Cool!
Jun 27 2013
prev sibling next sibling parent "Maxim Fomin" <maxim maxim-fomin.ru> writes:
On Thursday, 27 June 2013 at 20:24:46 UTC, Nick Sabalausky wrote:
 
 but auto can be used in paramenters too.

It can? Cool!

Actually I meant "dmd does not support the feature now, but I see no reason for not supporting it".
Jun 27 2013
prev sibling parent "bearophile" <bearophileHUGS lycos.com> writes:
In the meantime I have opened an enhancement request:
http://d.puremagic.com/issues/show_bug.cgi?id=10491

Henning Pohl has written a patch:
https://github.com/D-Programming-Language/dmd/pull/2270

And Kenji has written some comments in Bugzilla, explaining why 
he doesn't like this ER.

I usually trust Kenji judgement. So let's close down this idea?

Bye,
bearophile
Jun 29 2013