1*99451b44SJordan Rupprecht #include <new> 2*99451b44SJordan Rupprecht 3*99451b44SJordan Rupprecht struct new_tag_t 4*99451b44SJordan Rupprecht { 5*99451b44SJordan Rupprecht }; 6*99451b44SJordan Rupprecht new_tag_t new_tag; 7*99451b44SJordan Rupprecht 8*99451b44SJordan Rupprecht struct Struct { 9*99451b44SJordan Rupprecht int value; 10*99451b44SJordan Rupprecht }; 11*99451b44SJordan Rupprecht operator ==(const Struct & a,const Struct & b)12*99451b44SJordan Rupprechtbool operator==(const Struct &a, const Struct &b) { 13*99451b44SJordan Rupprecht return a.value == b.value; 14*99451b44SJordan Rupprecht } 15*99451b44SJordan Rupprecht 16*99451b44SJordan Rupprecht typedef char buf_t[sizeof(Struct)]; 17*99451b44SJordan Rupprecht buf_t global_new_buf, tagged_new_buf; 18*99451b44SJordan Rupprecht 19*99451b44SJordan Rupprecht // This overrides global operator new 20*99451b44SJordan Rupprecht // This function and the following does not actually allocate memory. We are merely 21*99451b44SJordan Rupprecht // trying to make sure it is getting called. 22*99451b44SJordan Rupprecht void * operator new(std::size_t count)23*99451b44SJordan Rupprechtoperator new(std::size_t count) 24*99451b44SJordan Rupprecht { 25*99451b44SJordan Rupprecht return &global_new_buf; 26*99451b44SJordan Rupprecht } 27*99451b44SJordan Rupprecht 28*99451b44SJordan Rupprecht // A custom allocator 29*99451b44SJordan Rupprecht void * operator new(std::size_t count,const new_tag_t &)30*99451b44SJordan Rupprechtoperator new(std::size_t count, const new_tag_t &) 31*99451b44SJordan Rupprecht { 32*99451b44SJordan Rupprecht return &tagged_new_buf; 33*99451b44SJordan Rupprecht } 34*99451b44SJordan Rupprecht main()35*99451b44SJordan Rupprechtint main() { 36*99451b44SJordan Rupprecht Struct s1, s2, s3; 37*99451b44SJordan Rupprecht s1.value = 3; 38*99451b44SJordan Rupprecht s2.value = 5; 39*99451b44SJordan Rupprecht s3.value = 3; 40*99451b44SJordan Rupprecht return 0; // break here 41*99451b44SJordan Rupprecht } 42*99451b44SJordan Rupprecht 43