fork(1) download
  1. #include <iostream>
  2.  
  3. class base {
  4. friend class deleter;
  5. protected:
  6. static void operator delete(void *p);
  7. };
  8.  
  9. class derived : public base {
  10. };
  11.  
  12. class deleter {
  13. public:
  14. void del(base *p) {
  15. delete p;
  16. }
  17. };
  18.  
  19. auto main()->int {
  20. derived *derivedp = new derived();
  21.  
  22. //delete derivedp; // this must not be allowed
  23.  
  24. deleter thisdeleter;
  25. thisdeleter.del(derivedp); // this should succeed
  26.  
  27. return EXIT_SUCCESS;
  28. }
Compilation error #stdin compilation error #stdout 0s 3468KB
stdin
Standard input is empty
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:6:15: error: ‘static void base::operator delete(void*)’ is protected
   static void operator delete(void *p);
               ^
prog.cpp:20:35: error: within this context
   derived *derivedp = new derived();
                                   ^
prog.cpp:6:15: error: ‘static void base::operator delete(void*)’ is protected
   static void operator delete(void *p);
               ^
prog.cpp:20:35: error: within this context
   derived *derivedp = new derived();
                                   ^
stdout
Standard output is empty