According to the documentation on AnyVal, Strings are not value types, so I believe the following shouldn't compile:
val a: AnyVal = "foo"
Here is how scalac complains:
$ echo 'val a: AnyVal = ""' | scala
Welcome to Scala 2.13.0-M5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_201).
scala> val a: AnyVal = ""
^
error: the result type of an implicit conversion must be more specific than AnyVal
$ echo 'val a: AnyVal = ""' | scala -Yno-predef
Welcome to Scala 2.13.0-M5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_201).
scala> val a: AnyVal = ""
^
error: type mismatch;
found : String("")
required: AnyVal
It inserts Predef.augmentString as an implicit conversion. Once we move to extension methods this problem is gone. Until then it would be good to bring back the restrictions that implicit conversions can't convert to Any, AnyVal, or AnyRef.
Most helpful comment
It inserts
Predef.augmentStringas an implicit conversion. Once we move to extension methods this problem is gone. Until then it would be good to bring back the restrictions that implicit conversions can't convert to Any, AnyVal, or AnyRef.