smart_pointer_extend f = Foo(); b = Bar(f); if (b.extension() != f.extension()) error endif b = CBase(); d = CDerived(); p = CPtr(); if (b.bar() != p.bar()) error endif if (d.foo() != p.foo()) error endif if (b.hello() != p.hello()) error endif d = DFoo(); dp = DPtrFoo(d); if (d.SExt(1) != dp.SExt(1)) error endif if (d.Ext(1) != dp.Ext(1)) error endif