//****** Header 1 ********** #include #include using boost::intrusive_ptr; class Foo; namespace boost { void intrusive_ptr_add_ref(Foo* psFoo); void intrusive_ptr_release(Foo* psFoo); }; class SomeClass { boost::detail::atomic_count reference_count; friend void ::boost::intrusive_ptr_add_ref(Foo* psFoo); friend void ::boost::intrusive_ptr_release(Foo* psFoo); }; namespace boost { void intrusive_ptr_add_ref(Foo* psFoo) { ++(psFoo->reference_count); } void intrusive_ptr_release(Foo* psFoo) { --(psFoo->reference_count); } }; //****** Header 2 ********** // include Header 1 #include using boost::intrusive_ptr; // Gcc 4.7.0 and clang 3.1 need the following two lines to compile this example //using boost::intrusive_ptr_add_ref; //using boost::intrusive_ptr_release; class Bar { intrusive_ptr psFoo; public: Bar(intrusive_ptr foo): psFoo(foo) { } }; //****** Source 2 ********** // include Header 2 int main(int, const char**) { return 0; }