#include #include ///////////////////////////////////////// // Definition of ImplT ///////////////////////////////////////// template<> struct KImplDef { KImplDef() { std::cout << "A created\n"; } ~KImplDef(){ std::cout << "A destroyed\n"; } void foo() { std::cout << "Impl::foo() \n"; } void foo() const { std::cout << "Impl::foo() const \n"; } }; ///////////////////////////////////////// // class A definition ///////////////////////////////////////// A::A() {} void A::foo(){ d->foo(); } void A::foo() const { d->foo(); } ///////////////////////////////////////// // main ///////////////////////////////////////// int main() { A* a = new A; const A* ca = new A; a->foo(); ca->foo(); delete a; delete ca; return 0; }