diff options
author | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2015-02-15 17:14:23 +0100 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2015-02-15 17:14:23 +0100 |
commit | fbbd1b23c99dab32f5f6e05e5f82fd81c7852a37 (patch) | |
tree | 0dd7a003b6d7c1d6dbad4a9d9bbb45e2fa3ef022 /test/files/pos/t8223.scala | |
parent | ad0ddd4603e6ec134460491333444d505d376883 (diff) | |
parent | 2f5ff595fd141025de30dadfc97870ef01d44c9f (diff) | |
download | scala-fbbd1b23c99dab32f5f6e05e5f82fd81c7852a37.tar.gz scala-fbbd1b23c99dab32f5f6e05e5f82fd81c7852a37.tar.bz2 scala-fbbd1b23c99dab32f5f6e05e5f82fd81c7852a37.zip |
Merge pull request #4303 from milessabin/topic/backport-7753
Backported fix for SI-7753 to 2.10.x.
Diffstat (limited to 'test/files/pos/t8223.scala')
-rw-r--r-- | test/files/pos/t8223.scala | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/test/files/pos/t8223.scala b/test/files/pos/t8223.scala new file mode 100644 index 0000000000..52d6b0098e --- /dev/null +++ b/test/files/pos/t8223.scala @@ -0,0 +1,29 @@ +package p { + class ViewEnv[AIn] { + type A = AIn + class SubView { def has(x: A): Boolean = ??? } + def get: SubView = new SubView + } + + trait HasA { type A } + trait Indexable[R] extends HasA + class ArrayTC[AIn] extends Indexable[Array[AIn]] { type A = AIn } +} + +package object p { + implicit def arrayTypeClass[A] : ArrayTC[A] = new ArrayTC[A] + object intArrayTC extends ArrayTC[Int] + + type EnvAlias[W <: HasA] = ViewEnv[W#A] + type SubAlias[W <: HasA] = ViewEnv[W#A]#SubView + + def f0[R](xs: R)(implicit tc: Indexable[R]): ViewEnv[tc.A]#SubView = new ViewEnv[tc.A]() get + def f1[R](xs: R)(implicit tc: Indexable[R]): EnvAlias[tc.type]#SubView = new ViewEnv[tc.A]() get + def f2[R](xs: R)(implicit tc: Indexable[R]): SubAlias[tc.type] = new ViewEnv[tc.A]() get + + def g0 = f0(Array(1)) has 2 // ok + def g1 = f1(Array(1)) has 2 // ok + def g2 = f2(Array(1)) has 2 // "found: Int(2), required: tc.A" + def g3 = f2(Array(1))(new ArrayTC[Int]) has 2 // "found: Int(2), required: tc.A" + def g4 = f2(Array(1))(intArrayTC) has 2 // ok +} |