Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
June 27, 2010 auto functions not authorized inside main? | ||||
---|---|---|---|---|
| ||||
Is it defined somewhere that auto functions are not authorized inside main? void main() { auto fun(string s) { return s;} // this does not compile } error: main.d|6|found 's' when expecting ')'| main.d|6|semicolon expected, not ')'| main.d|6|found ')' instead of statement| main.d|7|unrecognized declaration| ||=== Build finished: 4 errors, 0 warnings ===| So it's not even parsed? I couldn't find a bugzilla entry for this and I cannot believe no one ever tried to put an auto fun inside main! Is that part of the spec? Philippe |
June 27, 2010 Re: auto functions not authorized inside main? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Philippe Sigaud | Philippe Sigaud:
> I couldn't find a bugzilla entry for this and I cannot believe no one ever tried to put an auto fun inside main!
Maybe auto funcs are seen as instantiated templates, and templates can't be defined inside functions. Anyway, I think you can file this as enhancement request.
Bye,
bearophile
|
June 28, 2010 Re: auto functions not authorized inside main? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Philippe Sigaud | On Sun, 27 Jun 2010 17:17:25 +0200, Philippe Sigaud <philippe.sigaud@gmail.com> wrote:
> Is it defined somewhere that auto functions are not authorized inside main?
>
> void main()
> {
> auto fun(string s) { return s;} // this does not compile
> }
>
> error:
>
> main.d|6|found 's' when expecting ')'|
> main.d|6|semicolon expected, not ')'|
> main.d|6|found ')' instead of statement|
> main.d|7|unrecognized declaration|
> ||=== Build finished: 4 errors, 0 warnings ===|
>
>
> So it's not even parsed?
>
> I couldn't find a bugzilla entry for this and I cannot believe no one ever
> tried to put an auto fun inside main!
>
> Is that part of the spec?
>
> Philippe
Hope this isn't a stupid question, but how would you access this function if it did work?
Would it be fun("asdf")?
Is this just shorthand for:
auto fun = function(string s) {return s;};
-Rory
|
June 28, 2010 Re: auto functions not authorized inside main? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Rory McGuire | Hello Rory, > On Sun, 27 Jun 2010 17:17:25 +0200, Philippe Sigaud > <philippe.sigaud@gmail.com> wrote: > >> void main() >> { >> auto fun(string s) { return s;} // this does not compile >> } > > Hope this isn't a stupid question, but how would you access this > function > if it did work? > Would it be fun("asdf")? > Is this just shorthand for: > auto fun = function(string s) {return s;}; I would look almost the same to the user but should in fact be a normal local function. -- ... <IXOYE>< |
June 28, 2010 Re: auto functions not authorized inside main? | ||||
---|---|---|---|---|
| ||||
Attachments:
| On Mon, 28 Jun 2010 16:07:43 +0200, Philippe Sigaud <philippe.sigaud@gmail.com> wrote: > On Mon, Jun 28, 2010 at 15:40, Rory McGuire <rmcguire@neonova.co.za> wrote: >>> void main() >>> { >>> auto fun(string s) { return s;} // this does not compile >>> } >> Hope this isn't a stupid question, but how would you access this >> function if it did work? >> Would it be fun("asdf")? > Yes, that's what I had in mind. Basically, just using it as any other auto inner function. > void main() > { > auto fun(string s) { return s;} > auto s = fun("abc"); > auto t = fun("def"); > } > >> Is this just shorthand for: >> auto fun = function(string s) {return s;}; > That'd be about the same, yes. Fact is, I don't really _need_ this, I > was just astonished to be bitten by this. > Why can I do > void main() > { > string foo(string s) { return s;} > } > and not > void main() > { > auto foo(string s) { return s;} > } > ? > *** > OK, I tested it some more, and it seems you cannot define auto function inside any other function. So auto function cannot be inner functions. I'm quite astonished I never did that when using D, but OK. > I filed a bug report, at least to update the docs. It's bug #4401. > Philippe Right! I get what you're saying, didn't realise because it was formatted more how I would format a anon delegate. You're saying "surely the compiler can infer the return type for a inner function just as much as it can infer the return type of a normal function. Must be a compiler bug. -Rory |
June 28, 2010 Re: auto functions not authorized inside main? | ||||
---|---|---|---|---|
| ||||
Posted in reply to BCS | On Mon, 28 Jun 2010 16:01:46 +0200, BCS <none@anon.com> wrote:
> Hello Rory,
>
>> On Sun, 27 Jun 2010 17:17:25 +0200, Philippe Sigaud
>> <philippe.sigaud@gmail.com> wrote:
>>
>>> void main()
>>> {
>>> auto fun(string s) { return s;} // this does not compile
>>> }
>>
>> Hope this isn't a stupid question, but how would you access this
>> function
>> if it did work?
>> Would it be fun("asdf")?
>> Is this just shorthand for:
>> auto fun = function(string s) {return s;};
>
> I would look almost the same to the user but should in fact be a normal local function.
>
Ye I got it now.
My brain was interpreting it as a delegate that wasn't being assigned to anything for some reason.
Now I get that it is just return type inferance doesn't work for inner functions.
-Rory
|
Copyright © 1999-2021 by the D Language Foundation