On Friday, February 2, 2018 at 10:27:04 AM UTC-5, Ian Lance Taylor wrote: > > On Fri, Feb 2, 2018 at 7:10 AM, <di...@veryhaha.com <javascript:>> > 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. > > Ian >
> If you actually write `true`, then, > following the usual rules for untyped constant expressions, > it will receive the type `bool`, But, in my expression, the result of a constant expression is still untyped. And "true" is a per-declared untyped boolean value. And, here is another example to should the untyped result is converted to type "bool": package main type T bool func f() T {return T(false)} func main() { switch true == true { case f(): // invalid case f() in switch (mismatched types T and bool) } } -- 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.