trait Licensed { fn licensing_info(&self) -> String { "Default license".to_string() } } struct SomeSoftware; struct OtherSoftware; impl Licensed for SomeSoftware {} impl Licensed for OtherSoftware {} // TODO: Fix the compiler error by only changing the signature of this function. fn compare_license_types(software1: T, software2: F) -> bool where T: Licensed, F: Licensed{ software1.licensing_info() == software2.licensing_info() } fn main() { // You can optionally experiment here. } #[cfg(test)] mod tests { use super::*; #[test] fn compare_license_information() { assert!(compare_license_types(SomeSoftware, OtherSoftware)); } #[test] fn compare_license_information_backwards() { assert!(compare_license_types(OtherSoftware, SomeSoftware)); } }