On Fri, Feb 2, 2018 at 7:10 AM,  <d...@veryhaha.com> wrote:
> Why not make it untyped?
> package main
> type T bool
> func f() T {return T(false)}
> func main() {
>     switch {
>     case f(): // invalid case f() in switch (mismatched types T and bool)
>     }
> }

The current language spec says that omitting the switch expression is
equivalent to writing `true`.  If you actually write `true`, then,
following the usual rules for untyped constant expressions, it will
receive the type `bool`, and you would get the same mismatched type
error.  You will see a similar case if you write `switch 0` and try to
compare with a named version of `int`.  So the compiler is following
the language spec as currently written.

We could change the language spec to say that omitting the switch
expression is not equivalent to writing `true`, but instead, as you
suggest, compares each case to an untyped `true` value.  I think the
main argument against that is that it makes the spec slightly more
complicated while bringing very little benefit.  You could write it up
as a language change proposal if you like.


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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to