| #include <new> | |
| struct new_tag_t | |
| { | |
| }; | |
| new_tag_t new_tag; | |
| struct Struct { | |
| int value; | |
| }; | |
| bool operator==(const Struct &a, const Struct &b) { | |
| return a.value == b.value; | |
| } | |
| typedef char buf_t[sizeof(Struct)]; | |
| buf_t global_new_buf, tagged_new_buf; | |
| // This overrides global operator new | |
| // This function and the following does not actually allocate memory. We are merely | |
| // trying to make sure it is getting called. | |
| void * | |
| operator new(std::size_t count) | |
| { | |
| return &global_new_buf; | |
| } | |
| // A custom allocator | |
| void * | |
| operator new(std::size_t count, const new_tag_t &) | |
| { | |
| return &tagged_new_buf; | |
| } | |
| int main() { | |
| Struct s1, s2, s3; | |
| s1.value = 3; | |
| s2.value = 5; | |
| s3.value = 3; | |
| return 0; // break here | |
| } | |