pub fn type_overlap(&self, t1: &MetaType<S>, t2: &MetaType<S>) -> bool {
        if (t1 as *const MetaType<S>) == (t2 as *const MetaType<S>) {
            return true;
        }

        match (t1.is_abstract(), t2.is_abstract()) {
            (true, true) => self
                .possible_types(t1)
                .iter()
                .any(|t| self.is_possible_type(t2, t)),
            (true, false) => self.is_possible_type(t1, t2),
            (false, true) => self.is_possible_type(t2, t1),
            (false, false) => false,
        }
    }
/// Determine if there is an overlap between types.
Determine if there is an overlap between types.
Determine if there is an overlap between types .
pub fn type_overlap(&self, t1: &MetaType<S>, t2: &MetaType<S>) -> bool {
        if (t1 as *const MetaType<S>) == (t2 as *const MetaType<S>) {
            return true;
        }
        match (t1.is_abstract(), t2.is_abstract()) {
            (true, true) => self
                .possible_types(t1)
                .iter()
                .any(|t| self.is_possible_type(t2, t)),
            (true, false) => self.is_possible_type(t1, t2),
            (false, true) => self.is_possible_type(t2, t1),
            (false, false) => false,
        }
    }
pub fn type_overlap ( & self , t1 : & MetaType < S > , t2 : & MetaType < S > ) -> bool { if ( t1 as * const MetaType < S > ) == ( t2 as * const MetaType < S > ) { return true ; } match ( t1 . is_abstract ( ) , t2 . is_abstract ( ) ) { ( true , true ) => self . possible_types ( t1 ) . iter ( ) . any ( | t | self . is_possible_type ( t2 , t ) ) , ( true , false ) => self . is_possible_type ( t1 , t2 ) , ( false , true ) => self . is_possible_type ( t2 , t1 ) , ( false , false ) => false , } }
Determine if there is an overlap between types.
Determine if there is an overlap between types .
&self
t1
&MetaType<S>
t2
&MetaType<S>
&self
t1
&MetaType<S>
t2
&MetaType<S>