aboutsummaryrefslogtreecommitdiff
path: root/tests/untried/neg-with-implicits/t2316.scala
diff options
context:
space:
mode:
authorSamuel Gruetter <samuel.gruetter@epfl.ch>2014-03-19 17:53:49 +0100
committerSamuel Gruetter <samuel.gruetter@epfl.ch>2014-03-19 17:53:49 +0100
commitd51d08b444e0ea4a2c13b4daf0ce14b53bfbad89 (patch)
tree1d3a66fc0f5f839a561a2987159cb5b841b89257 /tests/untried/neg-with-implicits/t2316.scala
parent24ac35546c2c159403e91144e0e4add585ee9ae5 (diff)
downloaddotty-d51d08b444e0ea4a2c13b4daf0ce14b53bfbad89.tar.gz
dotty-d51d08b444e0ea4a2c13b4daf0ce14b53bfbad89.tar.bz2
dotty-d51d08b444e0ea4a2c13b4daf0ce14b53bfbad89.zip
move all tests in tests/untried/neg which use implicits to tests/untried/neg-with-implicits
Diffstat (limited to 'tests/untried/neg-with-implicits/t2316.scala')
-rw-r--r--tests/untried/neg-with-implicits/t2316.scala43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/untried/neg-with-implicits/t2316.scala b/tests/untried/neg-with-implicits/t2316.scala
new file mode 100644
index 000000000..bf4bb0ec6
--- /dev/null
+++ b/tests/untried/neg-with-implicits/t2316.scala
@@ -0,0 +1,43 @@
+object test {
+ case class T1(val source: String)
+
+
+ object T1 {
+ implicit def T1FromT2(implicit t2: T2): T1 = T1("implicit def T1FromT2")
+ implicit def T1FromT3(implicit t3: T3): T1 = T1("implicit def T1FromT3")
+ }
+
+ trait T2 {
+ }
+
+ object T2 {
+ implicit val t2: T2 = new T2 {}
+ }
+
+ trait T3
+
+ def requireT1(implicit t1: T1) = t1
+
+ {
+ val t1 = requireT1
+ assert(t1.source == "implicit def T1FromT2")
+ }
+
+ {
+ implicit def t3: T3 = new T3 {}
+ val t1 = requireT1
+ assert(t1.source == "implicit def T1FromT2")
+
+ // Expected a compile error here, but because T1.T1FromT2(T2.t2) was cached as a non-local implicit
+ // expression for type T1, this is not checked!
+ //
+ // (fragment of implicit-cache-error2.scala):26: error: ambiguous implicit values:
+ // both method T1FromT3 in object T1 of type (implicit t3: this.T3)this.T1
+ // and method T1FromT2 in object T1 of type (implicit t2: this.T2)this.T1
+ // match expected type this.T1
+ // val t1 = requireT1
+ // ^
+ // one error found
+
+ }
+}