The type the pointee refers to.
struct IFace1 { int getX() { return 12; } } struct Struct1 { int x; int getX() { return x; } } Struct1 s1; s1.x = 42; DuckPointer!IFace1 ptr1 = duck!IFace1( &s1 ); assert( ptr1.getX() == 42 );
struct MyMixinImpl { mixin MyMixin!(); } alias MixinPtr = DuckPointer!MyMixinImpl; struct Struct1 { mixin MyMixin!(); } Struct1 s1; s1.x = 42; MixinPtr ptr1 = MixinPtr( &s1 ); assert( ptr1.x == 42 ); assert( ptr1.getX() == 42 ); ++ptr1.x; assert( ptr1.x == 43 ); assert( ptr1.getX() == 43 ); assert( s1.x == 43 );
Pointer to any type that extends Pointee.
To make a DuckPointer for a mixin, it's recommended to define a struct that only implements the mixin.