Trait tract_hir::internal::tract_downcast_rs::__std::prelude::rust_2018::Default 1.0.0[−][src]
A trait for giving a type a useful default value.
Sometimes, you want to fall back to some kind of default value, and
don’t particularly care what it is. This comes up often with struct
s
that define a set of options:
struct SomeOptions { foo: i32, bar: f32, }
How can we define some default values? You can use Default
:
#[derive(Default)] struct SomeOptions { foo: i32, bar: f32, } fn main() { let options: SomeOptions = Default::default(); }
Now, you get all of the default values. Rust implements Default
for various primitives types.
If you want to override a particular option, but still retain the other defaults:
fn main() { let options = SomeOptions { foo: 42, ..Default::default() }; }
Derivable
This trait can be used with #[derive]
if all of the type’s fields implement
Default
. When derive
d, it will use the default value for each field’s type.
How can I implement Default
?
Provide an implementation for the default()
method that returns the value of
your type that should be the default:
enum Kind { A, B, C, } impl Default for Kind { fn default() -> Self { Kind::A } }
Examples
#[derive(Default)] struct SomeOptions { foo: i32, bar: f32, }
Required methods
pub fn default() -> Self
[src]
Returns the “default value” for a type.
Default values are often some kind of initial value, identity value, or anything else that may make sense as a default.
Examples
Using built-in default values:
let i: i8 = Default::default(); let (x, y): (Option<String>, f64) = Default::default(); let (a, b, (c, d)): (i32, u32, (bool, bool)) = Default::default();
Making your own:
enum Kind { A, B, C, } impl Default for Kind { fn default() -> Self { Kind::A } }
Implementations on Foreign Types
impl<T> Default for [T; 28] where
T: Default,
[src]
T: Default,
impl<'_> Default for &'_ mut str
[src]
impl Default for ()
[src]
impl<A, B, C, D, E, F, G, H, I, J, K> Default for (A, B, C, D, E, F, G, H, I, J, K) where
C: Default,
I: Default,
K: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
H: Default,
G: Default,
J: Default,
[src]
C: Default,
I: Default,
K: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
H: Default,
G: Default,
J: Default,
impl Default for i8
[src]
impl<A, B, C, D, E> Default for (A, B, C, D, E) where
C: Default,
E: Default,
A: Default,
B: Default,
D: Default,
[src]
C: Default,
E: Default,
A: Default,
B: Default,
D: Default,
impl<T> Default for [T; 27] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 1] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 3] where
T: Default,
[src]
T: Default,
impl<A, B, C, D, E, F> Default for (A, B, C, D, E, F) where
C: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
[src]
C: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
impl Default for usize
[src]
impl<T> Default for [T; 16] where
T: Default,
[src]
T: Default,
impl Default for f32
[src]
impl<T> Default for [T; 32] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 14] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 18] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 11] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 13] where
T: Default,
[src]
T: Default,
impl<A> Default for (A,) where
A: Default,
[src]
A: Default,
impl<A, B, C, D, E, F, G, H> Default for (A, B, C, D, E, F, G, H) where
C: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
H: Default,
G: Default,
[src]
C: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
H: Default,
G: Default,
impl<A, B> Default for (A, B) where
A: Default,
B: Default,
[src]
A: Default,
B: Default,
impl<A, B, C, D, E, F, G> Default for (A, B, C, D, E, F, G) where
C: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
G: Default,
[src]
C: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
G: Default,
impl<T> Default for [T; 5] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 30] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 10] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 7] where
T: Default,
[src]
T: Default,
impl<'_, T> Default for &'_ [T]
[src]
impl<T> Default for [T; 4] where
T: Default,
[src]
T: Default,
impl<A, B, C, D, E, F, G, H, I, J> Default for (A, B, C, D, E, F, G, H, I, J) where
C: Default,
I: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
H: Default,
G: Default,
J: Default,
[src]
C: Default,
I: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
H: Default,
G: Default,
J: Default,
impl Default for u8
[src]
impl<T> Default for [T; 22] where
T: Default,
[src]
T: Default,
impl<A, B, C, D, E, F, G, H, I> Default for (A, B, C, D, E, F, G, H, I) where
C: Default,
I: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
H: Default,
G: Default,
[src]
C: Default,
I: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
H: Default,
G: Default,
impl Default for i16
[src]
impl Default for bool
[src]
impl Default for u32
[src]
impl<T> Default for [T; 0]
[src]
impl<T> Default for [T; 9] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 19] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 25] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 23] where
T: Default,
[src]
T: Default,
impl Default for i128
[src]
impl<'_> Default for &'_ str
[src]
impl<T> Default for [T; 31] where
T: Default,
[src]
T: Default,
impl Default for u128
[src]
impl<T> Default for [T; 12] where
T: Default,
[src]
T: Default,
impl Default for char
[src]
impl<T> Default for [T; 26] where
T: Default,
[src]
T: Default,
impl Default for f64
[src]
impl<A, B, C> Default for (A, B, C) where
C: Default,
A: Default,
B: Default,
[src]
C: Default,
A: Default,
B: Default,
impl<T> Default for [T; 21] where
T: Default,
[src]
T: Default,
impl Default for u64
[src]
impl<T> Default for [T; 6] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 15] where
T: Default,
[src]
T: Default,
impl Default for u16
[src]
impl<A, B, C, D> Default for (A, B, C, D) where
C: Default,
A: Default,
B: Default,
D: Default,
[src]
C: Default,
A: Default,
B: Default,
D: Default,
impl Default for i64
[src]
impl Default for i32
[src]
impl<'_, T> Default for &'_ mut [T]
[src]
pub fn default() -> &'_ mut [T]ⓘ
[src]
Creates a mutable empty slice.
impl<T> Default for [T; 20] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 2] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 17] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 24] where
T: Default,
[src]
T: Default,
impl<T> Default for [T; 8] where
T: Default,
[src]
T: Default,
impl<A, B, C, D, E, F, G, H, I, J, K, L> Default for (A, B, C, D, E, F, G, H, I, J, K, L) where
C: Default,
I: Default,
K: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
H: Default,
G: Default,
L: Default,
J: Default,
[src]
C: Default,
I: Default,
K: Default,
F: Default,
E: Default,
A: Default,
B: Default,
D: Default,
H: Default,
G: Default,
L: Default,
J: Default,
impl<T> Default for [T; 29] where
T: Default,
[src]
T: Default,
impl Default for isize
[src]
impl Default for KernelFormat
[src]
pub fn default() -> KernelFormat
[src]
impl Default for MultiBroadcastTo
[src]
pub fn default() -> MultiBroadcastTo
[src]
impl Default for FiniteReshape
[src]
pub fn default() -> FiniteReshape
[src]
impl Default for Tile
[src]
impl<B> Default for BitSet<B> where
B: BitBlock,
B: BitBlock,
pub fn default() -> BitSet<B>
impl<B> Default for BitVec<B> where
B: BitBlock,
[src]
B: BitBlock,
impl<T> Default for Complex<T> where
T: Default,
[src]
T: Default,
impl Default for f16
[src]
impl Default for bf16
[src]
Loading content...Implementors
impl Default for TDim
impl Default for PadMode
[src]
impl Default for PaddingSpec
[src]
pub fn default() -> PaddingSpec
[src]
impl Default for DataFormat
[src]
pub fn default() -> DataFormat
[src]
impl Default for InferenceFact
[src]
fn default() -> InferenceFact
[src]
impl Default for ShapeFactoid
[src]
fn default() -> ShapeFactoid
[src]
Returns the most general shape fact possible.
impl Default for AxisChangeConsequence
[src]
pub fn default() -> AxisChangeConsequence
[src]
impl Default for AxisInfo
[src]
impl Default for Blob
impl Default for Invariants
[src]
pub fn default() -> Invariants
[src]
impl Default for SessionState
[src]
pub fn default() -> SessionState
[src]
impl Default for SymbolValues
pub fn default() -> SymbolValues
impl Default for Tensor
impl Default for tract_hir::internal::f16
impl Default for Global
[src]
impl Default for Box<str, Global>
1.17.0[src]
pub fn default() -> Box<str, Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
impl Default for Box<CStr, Global>
1.17.0[src]
pub fn default() -> Box<CStr, Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
impl Default for Box<OsStr, Global>
1.17.0[src]
pub fn default() -> Box<OsStr, Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
impl Default for String
[src]
impl Default for System
1.28.0[src]
impl Default for DefaultHasher
1.13.0[src]
pub fn default() -> DefaultHasher
[src]
Creates a new DefaultHasher
using new
.
See its documentation for more.
impl Default for RandomState
1.7.0[src]
pub fn default() -> RandomState
[src]
Constructs a new RandomState
.
impl Default for CString
1.10.0[src]
impl Default for OsString
1.9.0[src]
impl Default for Error
[src]
impl Default for SipHasher
[src]
impl Default for PhantomPinned
1.33.0[src]
pub fn default() -> PhantomPinned
[src]
impl Default for RangeFull
[src]
impl Default for PathBuf
1.17.0[src]
impl Default for AtomicBool
[src]
pub fn default() -> AtomicBool
[src]
Creates an AtomicBool
initialized to false
.
impl Default for AtomicI8
1.34.0[src]
impl Default for AtomicI16
1.34.0[src]
impl Default for AtomicI32
1.34.0[src]
impl Default for AtomicI64
1.34.0[src]
impl Default for AtomicIsize
[src]
pub fn default() -> AtomicIsize
[src]
impl Default for AtomicU8
1.34.0[src]
impl Default for AtomicU16
1.34.0[src]
impl Default for AtomicU32
1.34.0[src]
impl Default for AtomicU64
1.34.0[src]
impl Default for AtomicUsize
[src]
pub fn default() -> AtomicUsize
[src]
impl Default for Condvar
1.10.0[src]
impl Default for Duration
1.3.0[src]
impl Default for IxDynImpl
[src]
impl Default for ConstantLike
[src]
fn default() -> ConstantLike
[src]
impl Default for Crop
[src]
impl Default for EyeLike
[src]
impl Default for Flatten
[src]
impl Default for tract_hir::ops::array::MultiBroadcastTo
[src]
fn default() -> MultiBroadcastTo
[src]
impl Default for Pad
[src]
impl Default for Reshape
[src]
impl Default for Slice
[src]
impl Default for Split
[src]
impl Default for Squeeze
[src]
impl Default for tract_hir::ops::array::Tile
[src]
impl Default for Conv
[src]
impl Default for MaxPool
[src]
impl Default for PoolSpec
[src]
impl Default for SumPool
[src]
impl Default for Downsample
[src]
pub fn default() -> Downsample
[src]
impl Default for Identity
[src]
impl Default for Iff
[src]
impl Default for MatMul
[src]
impl Default for MatMulInference
[src]
fn default() -> MatMulInference
[src]
impl Default for LayerHardmax
[src]
fn default() -> LayerHardmax
[src]
impl Default for LayerLogSoftmax
[src]
fn default() -> LayerLogSoftmax
[src]
impl Default for LayerSoftmax
[src]
fn default() -> LayerSoftmax
[src]
impl Default for InferenceScan
[src]
fn default() -> InferenceScan
[src]
impl Default for Scan
[src]
impl<'_> Default for &'_ CStr
1.10.0[src]
impl<'_> Default for &'_ OsStr
1.9.0[src]
impl<'_> Default for Chain<'_>
[src]
impl<'_, B> Default for Cow<'_, B> where
B: ToOwned + ?Sized,
<B as ToOwned>::Owned: Default,
1.11.0[src]
B: ToOwned + ?Sized,
<B as ToOwned>::Owned: Default,
pub fn default() -> Cow<'_, B>
[src]
Creates an owned Cow<’a, B> with the default value for the contained owned value.
impl<'rules> Default for Solver<'rules>
[src]
impl<A> Default for SmallVec<A> where
A: Array,
A: Array,
impl<A, S, D> Default for ArrayBase<S, D> where
S: DataOwned<Elem = A>,
A: Default,
D: Dimension,
[src]
S: DataOwned<Elem = A>,
A: Default,
D: Dimension,
Create an owned array with a default state.
The array is created with dimension D::default()
, which results
in for example dimensions 0
and (0, 0)
with zero elements for the
one-dimensional and two-dimensional cases respectively.
The default dimension for IxDyn
is IxDyn(&[0])
(array has zero
elements). And the default for the dimension ()
is ()
(array has
one element).
Since arrays cannot grow, the intention is to use the default value as placeholder.
impl<F> Default for Outlet<F> where
F: Default + Fact + Hash,
[src]
F: Default + Fact + Hash,
impl<F, O> Default for Graph<F, O> where
O: Debug + Display + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + 'static + Hash,
F: Fact + Hash + Clone + 'static,
[src]
O: Debug + Display + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + 'static + Hash,
F: Fact + Hash + Clone + 'static,
impl<F, O> Default for ModelPatch<F, O> where
O: Display + Debug + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + 'static + Hash,
F: Fact + Clone + 'static + Hash,
[src]
O: Display + Debug + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + 'static + Hash,
F: Fact + Clone + 'static + Hash,
pub fn default() -> ModelPatch<F, O>
[src]
impl<H> Default for BuildHasherDefault<H>
1.7.0[src]
pub fn default() -> BuildHasherDefault<H>
[src]
impl<I> Default for Dim<I> where
I: Default + ?Sized,
[src]
I: Default + ?Sized,
impl<Idx> Default for Range<Idx> where
Idx: Default,
[src]
Idx: Default,
impl<K, V> Default for BTreeMap<K, V> where
K: Ord,
[src]
K: Ord,
impl<K, V, S> Default for HashMap<K, V, S> where
S: Default,
[src]
S: Default,
pub fn default() -> HashMap<K, V, S>
[src]
Creates an empty HashMap<K, V, S>
, with the Default
value for the hasher.
impl<T> Default for Option<T>
[src]
impl<T> Default for Arc<T> where
T: Default,
[src]
T: Default,
pub fn default() -> Arc<T>
[src]
Creates a new Arc<T>
, with the Default
value for T
.
Examples
use std::sync::Arc; let x: Arc<i32> = Default::default(); assert_eq!(*x, 0);
impl<T> Default for OutletMap<T> where
T: Default,
[src]
T: Default,
impl<T> Default for PhantomData<T> where
T: ?Sized,
[src]
T: ?Sized,
pub fn default() -> PhantomData<T>
[src]
impl<T> Default for BTreeSet<T> where
T: Ord,
[src]
T: Ord,
impl<T> Default for BinaryHeap<T> where
T: Ord,
[src]
T: Ord,
pub fn default() -> BinaryHeap<T>
[src]
Creates an empty BinaryHeap<T>
.
impl<T> Default for LinkedList<T>
[src]
pub fn default() -> LinkedList<T>
[src]
Creates an empty LinkedList<T>
.
impl<T> Default for VecDeque<T>
[src]
impl<T> Default for Box<[T], Global>
[src]
pub fn default() -> Box<[T], Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
impl<T> Default for Box<T, Global> where
T: Default,
[src]
T: Default,
pub fn default() -> Box<T, Global>ⓘNotable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
[src]
Notable traits for Box<R, Global>
impl<R> Read for Box<R, Global> where
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;
Creates a Box<T>
, with the Default
value for T.
impl<T> Default for Vec<T, Global>
[src]
impl<T> Default for tract_hir::internal::tract_downcast_rs::__alloc::sync::Weak<T>
1.10.0[src]
impl<T> Default for Cell<T> where
T: Default,
[src]
T: Default,
impl<T> Default for RefCell<T> where
T: Default,
[src]
T: Default,
impl<T> Default for UnsafeCell<T> where
T: Default,
1.10.0[src]
T: Default,
pub fn default() -> UnsafeCell<T>
[src]
Creates an UnsafeCell
, with the Default
value for T.
impl<T> Default for Reverse<T> where
T: Default,
1.19.0[src]
T: Default,
impl<T> Default for Cursor<T> where
T: Default,
[src]
T: Default,
impl<T> Default for Empty<T>
1.2.0[src]
impl<T> Default for Lazy<T, fn() -> T> where
T: Default,
[src]
T: Default,
pub fn default() -> Lazy<T, fn() -> T>
[src]
Creates a new lazy value using Default
as the initializing function.
impl<T> Default for OnceCell<T>
[src]
impl<T> Default for SyncLazy<T, fn() -> T> where
T: Default,
[src]
T: Default,
pub fn default() -> SyncLazy<T, fn() -> T>
[src]
Creates a new lazy value using Default
as the initializing function.
impl<T> Default for SyncOnceCell<T>
[src]
pub fn default() -> SyncOnceCell<T>
[src]
impl<T> Default for ManuallyDrop<T> where
T: Default + ?Sized,
1.20.0[src]
T: Default + ?Sized,
pub fn default() -> ManuallyDrop<T>
[src]
impl<T> Default for Wrapping<T> where
T: Default,
[src]
T: Default,
impl<T> Default for Rc<T> where
T: Default,
[src]
T: Default,
pub fn default() -> Rc<T>
[src]
Creates a new Rc<T>
, with the Default
value for T
.
Examples
use std::rc::Rc; let x: Rc<i32> = Default::default(); assert_eq!(*x, 0);
impl<T> Default for tract_hir::internal::tract_downcast_rs::__std::rc::Weak<T>
1.10.0[src]
impl<T> Default for AtomicPtr<T>
[src]
impl<T> Default for Mutex<T> where
T: Default + ?Sized,
1.10.0[src]
T: Default + ?Sized,
impl<T> Default for RwLock<T> where
T: Default,
1.10.0[src]
T: Default,
impl<T, S> Default for HashSet<T, S> where
S: Default,
[src]
S: Default,
pub fn default() -> HashSet<T, S>
[src]
Creates an empty HashSet<T, S>
with the Default
value for the hasher.
impl<T: Debug + Clone + PartialEq + Hash> Default for GenericFactoid<T>
[src]
impl<TI> Default for ScratchSpaceFusedNonLinear<TI> where
TI: Copy,
TI: Copy,