bearophile wrote:
Ary Borenszweig:
Since when a non-templated function can have its return type deduced? :)<

More than two months ago I have asked for such feature. Then I have tested it, 
and it was already present :-) So I think it's OK, and expected, it helps when 
you return very complex types (for example lazy templated generators).

Ah... but it wasn't mentioned anywhere.

I was asking because I get parser errors with Descent if I write that. I'm trying to see where I made a mistake in porting the parser, but the code for parsing that is:

---
/* Look for return type inference for template functions.
     */
{
    Token *tk;
    if (storage_class &&
    token.value == TOKidentifier &&
    (tk = peek(&token))->value == TOKlparen &&
    skipParens(tk, &tk) &&
    peek(tk)->value == TOKlparen)
    {
        ts = NULL;
    }
    else
    {
        ts = parseBasicType();
        ts = parseBasicType2(ts);
    }
}
---

and there's also a similar code somewhere else. The parser is there after consuming the "auto" token, so token's value is TOKidentifier. As you can see, it checks that the next token is "(", then it peeks past the closing parenthesis and checks that that token is also "(" (for a templated function). So it won't work with non-templated functions. And parseBasicType and parseBasicType2 fail.

I'll probably need to debug the C++ code... unless someone can debug it for me and tell me what's going on. :)

Reply via email to