Skip to main content



The ExplicitlyCopyable trait denotes a type whose value can be copied explicitly.

Unlike Copyable, which denotes types that are implicitly copyable, an explicitly copyable type can only be copied when the explicit copy initializer is called intentionally by the programmer.

An explicit copy initializer is just a normal __init__ method that takes a borrowed argument of Self.

Example implementing the ExplicitlyCopyable trait on Foo which requires the __init__(.., Self) method:

struct Foo(ExplicitlyCopyable):
var s: String

fn __init__(inout self, s: String):
self.s = s

fn __init__(inout self, copy: Self):
print("explicitly copying value")
self.s = copy.s

You can now copy objects inside a generic function:

fn copy_return[T: ExplicitlyCopyable](foo: T) -> T:
var copy = T(foo)
return copy

var foo = Foo("test")
var res = copy_return(foo)
explicitly copying value

Implemented traits




__init__(inout self: T, /, other: T)

Construct a deep copy of the provided value.


  • other (T): The value to copy.