Skip to content

Trait constraints that involve byref returns can never be satisfied by any method #13674

Open
@0101

Description

@0101

Not very important/common use case, but still creating an issue to keep track of it.

Code examples (link to tests):

type C5() =
    static member X(p: C5 byref) = &p

let inline callX5<'T when 'T : (static member X: 'T byref -> 'T byref)> (x: 'T byref)  = 'T.X &x
let mutable c5 = C5()
let g5 () = callX5<C5> &c5
type C6() =
    static member X(p: C6 byref) = &p

// NOTE: you can declare trait call which returns the address of the thing provided, you just can't satisfy the constraint
let inline callX6<'T when 'T : (static member X: 'T byref -> 'T byref)> (x: 'T byref)  = &'T.X &x
let mutable c6 = C6()
let g6 () = callX6<C6> &c6

Expected behavior

Code compiles and runs.

Actual behavior

Code doesn't compile and we get this error message at callX invocation:
This expression was expected to have type 'byref<C5>' but here has type 'C5'

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    Status

    New

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions