Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
May 15, 2013 cannot have overloaded nested functions? | ||||
---|---|---|---|---|
| ||||
Attachments:
| why isn't this supported? void main(){ void fun(); void fun(int x);//Error: declaration fun is already defined } |
May 16, 2013 Re: cannot have overloaded nested functions? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timothee Cour | On Wed, 15 May 2013 19:10:49 -0400, Timothee Cour <thelastmammoth@gmail.com> wrote:
> why isn't this supported?
>
> void main(){
> void fun();
> void fun(int x);//Error: declaration fun is already defined
> }
Don't know, but it hasn't been supported ever. Spec clearly states it's not supported, but not why. I suppose it is not difficult to name it something else?
Note that there are a lot of different rules with nested functions that don't apply to normal functions.
-Steve
|
May 16, 2013 Re: cannot have overloaded nested functions? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Wednesday, May 15, 2013 20:48:19 Steven Schveighoffer wrote:
> On Wed, 15 May 2013 19:10:49 -0400, Timothee Cour
>
> <thelastmammoth@gmail.com> wrote:
> > why isn't this supported?
> >
> > void main(){
> >
> > void fun();
> > void fun(int x);//Error: declaration fun is already defined
> >
> > }
>
> Don't know, but it hasn't been supported ever. Spec clearly states it's not supported, but not why. I suppose it is not difficult to name it something else?
>
> Note that there are a lot of different rules with nested functions that don't apply to normal functions.
You can't have multiple instantiations of templated nested functions either. IIRC, I created a bug report on it, and Walter closed it as won't fix, but I don't remember what his reasoning was, though IIRC, he was essentially of the opinion that nested functions didn't need to have the full capabilities of normal functions. I assume that that simplifies their implementation, but I don't know.
- Jonathan M Davis
|
May 16, 2013 Re: cannot have overloaded nested functions? | ||||
---|---|---|---|---|
| ||||
Attachments:
| at the very least (or until it gets fixed) dmd should emit a more friendly
error message:
'cannot overload a function in a nested scope'
otherwise this is hard to understand.
On Wed, May 15, 2013 at 11:43 PM, Jonathan M Davis <jmdavisProg@gmx.com>wrote:
> On Wednesday, May 15, 2013 20:48:19 Steven Schveighoffer wrote:
> > On Wed, 15 May 2013 19:10:49 -0400, Timothee Cour
> >
> > <thelastmammoth@gmail.com> wrote:
> > > why isn't this supported?
> > >
> > > void main(){
> > >
> > > void fun();
> > > void fun(int x);//Error: declaration fun is already defined
> > >
> > > }
> >
> > Don't know, but it hasn't been supported ever. Spec clearly states it's not supported, but not why. I suppose it is not difficult to name it something else?
> >
> > Note that there are a lot of different rules with nested functions that don't apply to normal functions.
>
> You can't have multiple instantiations of templated nested functions
> either.
> IIRC, I created a bug report on it, and Walter closed it as won't fix, but
> I
> don't remember what his reasoning was, though IIRC, he was essentially of
> the
> opinion that nested functions didn't need to have the full capabilities of
> normal functions. I assume that that simplifies their implementation, but I
> don't know.
>
> - Jonathan M Davis
>
|
May 16, 2013 Re: cannot have overloaded nested functions? | ||||
---|---|---|---|---|
| ||||
On Thursday, May 16, 2013 00:28:15 Timothee Cour wrote:
> at the very least (or until it gets fixed) dmd should emit a more friendly
> error message:
> 'cannot overload a function in a nested scope'
> otherwise this is hard to understand.
I don't know what else it would say. It means exactly what it says. It's telling you exactly what it can't do. Sure, it isn't telling you _why_ it's illegal, but error messages don't usually say that sort of thing anyway. So, if you have a good suggestion as to improve the error message, please create an enhancement request for it, but as far as I can tell, it means exactly what it says, and I don't know how it could be friendlier.
- Jonathan M Davis
|
May 16, 2013 Re: cannot have overloaded nested functions? | ||||
---|---|---|---|---|
| ||||
Attachments:
| > as far as I can tell, it means exactly what it says, and I don't know how it could be friendlier. the error message 'declaration fun is already defined' is surprising because 'void fun(int x);' and 'void fun();' are typically 2 different function declarations, having different signatures. So this this sounds misleading/surprising. > if you have a good suggestion as to improve the error message, please create an enhancement request for it how about: 'cannot overload a function in a nested scope' On Thu, May 16, 2013 at 12:35 AM, Jonathan M Davis <jmdavisProg@gmx.com>wrote: > On Thursday, May 16, 2013 00:28:15 Timothee Cour wrote: > > at the very least (or until it gets fixed) dmd should emit a more > friendly > > error message: > > 'cannot overload a function in a nested scope' > > otherwise this is hard to understand. > > I don't know what else it would say. It means exactly what it says. It's > telling you exactly what it can't do. Sure, it isn't telling you _why_ it's > illegal, but error messages don't usually say that sort of thing anyway. > So, > if you have a good suggestion as to improve the error message, please > create > an enhancement request for it, but as far as I can tell, it means exactly > what > it says, and I don't know how it could be friendlier. > > - Jonathan M Davis > |
May 16, 2013 Re: cannot have overloaded nested functions? | ||||
---|---|---|---|---|
| ||||
On Thursday, May 16, 2013 01:15:06 Timothee Cour wrote:
> > as far as I can tell, it means exactly what it says, and I don't know how
>
> it could be friendlier.
>
> the error message 'declaration fun is already defined' is surprising because 'void fun(int x);' and 'void fun();' are typically 2 different function declarations, having different signatures. So this this sounds misleading/surprising.
>
> > if you have a good suggestion as to improve the error message, please
>
> create an enhancement request for it
>
> how about:
>
> 'cannot overload a function in a nested scope'
Sounds fine to me. Open an enhancement request for it.
- Jonathan M Davis
|
Copyright © 1999-2021 by the D Language Foundation