Earlier the following(or something similar) used to work. I updated to latest mojo and it has started giving me the error listed underneath the code snippet! How can I make this work?
mojo --version => Mojo 25.5.0.dev2025071818 (0b26378c)
@fieldwise_init
struct T(Copyable & Movable):
alias InnerFn = fn (input: String) escaping -> String
var inner_fn: UnsafePointer[Self.InnerFn]
fn __init__(out self):
self.inner_fn = UnsafePointer[Self.InnerFn]()
fn do_it(self) -> Self:
fn some_inner_fn(input: String) escaping -> String:
return input.upper()
result = T()
result.inner_fn = UnsafePointer[Self.InnerFn].alloc(1)
result.inner_fn.init_pointee_copy(some_inner_fn)
return result
fn main() raises:
t = T()
result = t.do_it()
from_inner = result.inner_fn[]("here goes my input")
Error:
call expansion failed
result.inner_fn.init_pointee_copy(some_inner_fn)
memory/unsafe_pointer.mojo:1108:56: note: instantiated struct type @"testbed::fn(input: String) escaping -> String" does not have witness table for trait stdlib::builtin::value::Copyable