On Tue, Jun 16, 2020 at 4:49 PM Ben Kraft <benjaminjkr...@gmail.com> wrote:
>
> Consider the following code (playground):
>
> type R(type T) struct{}
> func F(type T)() {
>      _ = func() R(T) { return R(T){} }
> }
>
> That is, we have some parameterized type R(T), and a function literal which 
> returns that type R(T). (This is simplified from an example I found while 
> writing generic composition with a result type.)
>
> This currently fails with the following error message: prog.go:5:23: expected 
> operand, found 'return' (the referenced location is indeed the return). (As 
> an aside, this error message was pretty opaque -- not sure if improving that 
> sort of thing is in-scope for the prototype.)
>
> The issue appears to be a parsing ambiguity similar to the one described in 
> the design draft, where func() R(T) has been interpreted as (func() R)(T). 
> But the solution described there doesn't work: writing func() (R(T)) gets 
> parsed as (and gofmted to) func() (R T). That is, it runs into another 
> parsing ambiguity described in the draft. As a further workaround, I 
> eventually realized to use func() (_ R(T)); from there things work fine.
>
> Presumably the solution to the second parsing ambiguity could also work here, 
> if applied to function returns; of course that expands the compatibility 
> break described there.
>
> Not sure if this qualifies as discussion or a bug report; I figured I'd start 
> here but happy to make an issue if that's preferred.

Interesting case.  At the very least we need to describe this case in
the design draft.  Maybe there is a way that we can fix it.

Please do open a bug report for this.  Thanks.

Ian

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAOyqgcUqez0LzFbSuYcGa5T4ZUhnhAO6jhSrdMfohGw4K6bSzQ%40mail.gmail.com.

Reply via email to