<p>
If the type starts with the operator <code>*</code> or <code><-</code>,
-or the keyword <code>func</code>, it must be parenthesized:
+or if the type starts with the keyword <code>func</code>
+and has no result list, it must be parenthesized when
+necessary to avoid ambiguity:
</p>
<pre>
*Point(p) // same as *(Point(p))
-(*Point)(p) // p is converted to (*Point)
+(*Point)(p) // p is converted to *Point
<-chan int(c) // same as <-(chan int(c))
-(<-chan int)(c) // c is converted to (<-chan int)
+(<-chan int)(c) // c is converted to <-chan int
func()(x) // function signature func() x
-(func())(x) // x is converted to (func())
+(func())(x) // x is converted to func()
+(func() int)(x) // x is converted to func() int
+func() int(x) // x is converted to func() int (unambiguous)
</pre>
<p>
restricted circumstances.
</p>
-<p>
-Implementation restriction: For backward-compatibility with the Go 1 language
-specification, a compiler may accept non-parenthesized literal function types
-in conversions where the syntax is unambiguous.
-</p>
-
<h4>Conversions between numeric types</h4>
<p>