#[macro_use] extern crate derive_into_owned; use std::borrow::Cow; use std::borrow::ToOwned; #[derive(IntoOwned)] struct Foo<'a, T: 'a + ToOwned + ?Sized>(Cow<'a, T>); #[test] fn tuple_struct() { let non_static_string: String = "foobar".to_string(); let thing = Foo(Cow::Borrowed(&non_static_string)); accepts_only_static(thing.into_owned()); let non_static_vec: Vec = vec![0u8; 8]; let thing = Foo(Cow::Borrowed(&non_static_vec[..])); accepts_only_static(thing.into_owned()); } fn accepts_only_static(static_foo: Foo<'static, T>) { drop(static_foo); }