aboutsummaryrefslogtreecommitdiff
path: root/tests/pos
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-03-08 11:35:05 +0100
committerMartin Odersky <odersky@gmail.com>2017-03-08 17:50:20 +0100
commitf07697b25294eaafb1c86698c44a699ec1c0d1ba (patch)
tree5a08ac595fc61bfa467ce987728bee6d51839306 /tests/pos
parentc84480960cf618c29705dbaab9332d304a081524 (diff)
downloaddotty-f07697b25294eaafb1c86698c44a699ec1c0d1ba.tar.gz
dotty-f07697b25294eaafb1c86698c44a699ec1c0d1ba.tar.bz2
dotty-f07697b25294eaafb1c86698c44a699ec1c0d1ba.zip
Disallow subtypes of Function1 acting as implicit conversions
The new test `falseView.scala` shows the problem. We might create an implicit value of some type that happens to be a subtype of Function1. We might now expect that this gives us an implicit conversion, this is most often unintended and surprising. See the comment in Implicits#discardForView for a discussion why we picked the particular scheme implemented here.
Diffstat (limited to 'tests/pos')
-rw-r--r--tests/pos/t2421_delitedsl.scala3
1 files changed, 3 insertions, 0 deletions
diff --git a/tests/pos/t2421_delitedsl.scala b/tests/pos/t2421_delitedsl.scala
index 22f1ecd85..bde3593c9 100644
--- a/tests/pos/t2421_delitedsl.scala
+++ b/tests/pos/t2421_delitedsl.scala
@@ -1,6 +1,9 @@
trait DeliteDSL {
abstract class <~<[-From, +To] extends (From => To)
+
implicit def trivial[A]: A <~< A = new (A <~< A) {def apply(x: A) = x}
+ implicit def convert_<-<[A, B](x: A)(implicit ev: A <~< B): B = ev(x)
+
trait Forcible[T]
object Forcible {