#![warn(default_trait_access)] use std::default::Default as D2; use std::string; use std::default; fn main() { let s1: String = Default::default(); let s2 = String::default(); let s3: String = D2::default(); let s4: String = std::default::Default::default(); let s5 = string::String::default(); let s6: String = default::Default::default(); let s7 = std::string::String::default(); let s8: String = DefaultFactory::make_t_badly(); let s9: String = DefaultFactory::make_t_nicely(); let s10 = DerivedDefault::default(); let s11: GenericDerivedDefault = Default::default(); let s12 = GenericDerivedDefault::::default(); let s13 = TupleDerivedDefault::default(); let s14: TupleDerivedDefault = Default::default(); let s15: ArrayDerivedDefault = Default::default(); let s16 = ArrayDerivedDefault::default(); let s17: TupleStructDerivedDefault = Default::default(); let s18 = TupleStructDerivedDefault::default(); println!( "[{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}] [{:?}]", s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, ); } struct DefaultFactory; impl DefaultFactory { pub fn make_t_badly() -> T { Default::default() } pub fn make_t_nicely() -> T { T::default() } } #[derive(Debug, Default)] struct DerivedDefault { pub s: String, } #[derive(Debug, Default)] struct GenericDerivedDefault { pub s: T, } #[derive(Debug, Default)] struct TupleDerivedDefault { pub s: (String, String), } #[derive(Debug, Default)] struct ArrayDerivedDefault { pub s: [String; 10], } #[derive(Debug, Default)] struct TupleStructDerivedDefault(String);