use crate::RefClone;
macro_rules! impl_tuple {
($($param: ident),*) => {
unsafe impl<$($param: RefClone,)*> RefClone for ($($param,)*) {
fn ref_clone(&self) -> ($($param,)*) {
#[allow(non_snake_case)]
let ($($param,)*) = self;
(
$(
$param.ref_clone(),
)*
)
}
}
}
}
impl_tuple!(R0);
impl_tuple!(R0, R1);
impl_tuple!(R0, R1, R2);
impl_tuple!(R0, R1, R2, R3);
impl_tuple!(R0, R1, R2, R3, R4);
impl_tuple!(R0, R1, R2, R3, R4, R5);
impl_tuple!(R0, R1, R2, R3, R4, R5, R6);
impl_tuple!(R0, R1, R2, R3, R4, R5, R6, R7);
impl_tuple!(R0, R1, R2, R3, R4, R5, R6, R7, R8);
impl_tuple!(R0, R1, R2, R3, R4, R5, R6, R7, R8, R9);
impl_tuple!(R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10);
impl_tuple!(R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11);
impl_tuple!(R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12);
impl_tuple!(R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13);
impl_tuple!(R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14);
impl_tuple!(R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15);
mod assert {
use std::rc::Rc;
use crate::RefClone;
fn _a4<A,B,C,D>(v: (A, B, C, D)) -> (A, B, C, D)
where
A: RefClone,
B: RefClone,
C: RefClone,
D: RefClone,
{
v.ref_clone()
}
fn _a4_rc() {
_a4((
Rc::new(1),
Rc::new(2),
Rc::new(3),
Rc::new(4),
));
}
}