#include <new> #include <cstdlib> class X { protected: static void* operator new(size_t sz); static void operator delete(void* p) noexcept; }; class Y : public X { }; // inheritance is ok class Z { X x; }; // ok X x1; // ok int main() { X x2; // ok Y y1; // ok X* xp = new X; // syntax error Y* yp = new Y; // syntax error delete xp; // syntax error delete yp; // syntax error };
Standard input is empty
prog.cpp: In function ‘int main()’:
prog.cpp:19:15: error: ‘static void* X::operator new(size_t)’ is protected within this context
X* xp = new X; // syntax error
^
prog.cpp:7:16: note: declared protected here
static void* operator new(size_t sz);
^~~~~~~~
prog.cpp:20:15: error: ‘static void* X::operator new(size_t)’ is protected within this context
Y* yp = new Y; // syntax error
^
prog.cpp:7:16: note: declared protected here
static void* operator new(size_t sz);
^~~~~~~~
prog.cpp:22:10: error: ‘static void X::operator delete(void*)’ is protected within this context
delete xp; // syntax error
^~
prog.cpp:8:16: note: declared protected here
static void operator delete(void* p) noexcept;
^~~~~~~~
prog.cpp:22:10: error: ‘static void X::operator delete(void*)’ is protected within this context
delete xp; // syntax error
^~
prog.cpp:8:16: note: declared protected here
static void operator delete(void* p) noexcept;
^~~~~~~~
prog.cpp:23:10: error: ‘static void X::operator delete(void*)’ is protected within this context
delete yp; // syntax error
^~
prog.cpp:8:16: note: declared protected here
static void operator delete(void* p) noexcept;
^~~~~~~~
prog.cpp:23:10: error: ‘static void X::operator delete(void*)’ is protected within this context
delete yp; // syntax error
^~
prog.cpp:8:16: note: declared protected here
static void operator delete(void* p) noexcept;
^~~~~~~~
Standard output is empty