Closed
Description
Compiler version
3.2.1
Minimized code
import scala.annotation.targetName
trait Ctx
def foo(f: Ctx => Int) = ???
@targetName("fooContextual")
def foo(f: Ctx ?=> Int) = ???
def bar1 = foo(ctx => 123)
def bar2 = foo((ctx: Ctx) => 123)
def bar3 = foo(ctx ?=> 123)
def bar4 = foo((ctx: Ctx) ?=> 123)
def bar5 = foo(123)
Output
[error] Tmp.scala:14:16: Found: (Ctx) ?=> Int
[error] Required: Ctx => Int
[error] def bar3 = foo(ctx ?=> 123)
[error] ^^^^^^^^^^^
[error] Tmp.scala:15:16: Found: (Ctx) ?=> Int
[error] Required: Ctx => <?>
[error] def bar4 = foo((ctx: Ctx) ?=> 123)
[error] ^^^^^^^^^^^^^^^^^^
[error] Tmp.scala:16:16: Found: (123 : Int)
[error] Required: Ctx => <?>
[error] def bar5 = foo(123)
[error] ^^^
Expectation
This should compile as the compiler has enough information to know which overloaded method variant to use.