1// { dg-do compile } 2template<class T> class intrusive_ptr { 3public: 4 ~intrusive_ptr() { intrusive_ptr_release( px ); } 5 T * px; 6}; 7template <typename T> struct intrusive_base { 8 friend void intrusive_ptr_release(T* ptr) { delete ptr; } 9}; 10struct section_info; 11struct file_info : intrusive_base<file_info> { 12 intrusive_ptr<file_info> parent; 13 intrusive_ptr<section_info> switched_section; 14}; 15struct section_info : intrusive_base<section_info> { 16 intrusive_ptr<section_info> parent; 17}; 18struct id_state { 19 void * start_file(void); 20}; 21void * id_state::start_file(void) { 22 intrusive_ptr<file_info> parent; 23} 24struct id_generation_data : intrusive_base<id_generation_data> { 25 void child_length() const {} 26}; 27void generate_id(id_generation_data& generation_data) 28{ 29 generation_data.child_length(); 30} 31