pub struct ExternFoo; pub trait ExternTrait { const CONST: u32; type Assoc; } impl ExternTrait for ExternFoo { const CONST: u32 = 0; type Assoc = ExternFoo; } #[macro_export] macro_rules! external { () => { mod bar { #[derive(Double)] struct Bar($crate::ExternFoo); } mod qself { #[derive(Double)] struct QSelf(<$crate::ExternFoo as $crate::ExternTrait>::Assoc); } mod qself_recurse { #[derive(Double)] struct QSelfRecurse(< <$crate::ExternFoo as $crate::ExternTrait>::Assoc as $crate::ExternTrait>::Assoc ); } mod qself_in_const { #[derive(Double)] #[repr(u32)] enum QSelfInConst { Variant = <$crate::ExternFoo as $crate::ExternTrait>::CONST, } } } }