Stupid, stupid. While creating a minimal test case, my mistake becomes apparent, so please disregard. In case you're wondering, adding 'explicit' to the main Bifilter constructor stops the first parameter in
Bifilter _bif(new Filter(),Bifilter::DELETE_ON_DESTRUCTION); being implicitly converted to a Bilfilter& using the first constructor so that the second (copy) constructor gets called: class Bifilter : public Filter { public: enum DestructorAction { DELETE_ON_DESTRUCTION,KEEP_ON_DESTRUCTION }; explicit Bifilter( Filter* _source = 0, Filter* _sink = 0, DestructorAction _action = KEEP_ON_DESTRUCTION ); Bifilter( const Bifilter& _original, DestructorAction _action = KEEP_ON_DESTRUCTION ); ... Tricksy ;) Andrew Walrond