Skip to content

Can't properly disambiguate overloading when taking a lambda parameter #17717

@anatoliykmetyuk

Description

@anatoliykmetyuk

Compiler version

3.1.2

Minimized code

trait Buffer
trait Arr

def dummy(pMessenger: Buffer): Int = ???
def dummy(pMessenger: Arr): Int = ???
def Test = query(dummy)

def query[Ptr <: Buffer](function: Ptr => Int) = ???

Output

[error] -- [E051] Reference Error: /Users/kmetiuk/Projects/GameDev/vulkan-tutorial/src/main/scala/LongBufferPointerBufferBug.scala:6:17
[error] 6 |def Test = query(dummy)
[error]   |                 ^^^^^
[error]   |Ambiguous overload. The overloaded alternatives of method dummy with types
[error]   | (pMessenger: Arr): Int
[error]   | (pMessenger: Buffer): Int
[error]   |both match expected type Ptr => Int
[error] one error found

Expectation

Should compile and resolve the overload to dummy taking Buffer. The following works:

trait Buffer
trait Arr

def dummy(pMessenger: Buffer): Int = ???
def dummy(pMessenger: Arr): Int = ???
def Test = query(dummy)

def query(function: Buffer => Int) = ???

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions