macro_rules! define_allocator_memory_pool {
    (@as_expr $expr:expr) => { ... };
    ($freelist_size : tt, $T : ty, [0; $heap_size : expr], calloc) => { ... };
    ($freelist_size : tt, $T : ty, [0; $heap_size : expr], calloc_no_free) => { ... };
    ($freelist_size : tt, $T : ty, [0; $heap_size : expr], malloc) => { ... };
    ($freelist_size : tt, $T : ty, [0; $heap_size : expr], malloc_no_free) => { ... };
    ($freelist_size : tt, $T : ty, [$default_value : expr; $heap_size : expr], heap) => { ... };
    ($freelist_size : tt, $T : ty, [$default_value : expr; $heap_size : expr], stack) => { ... };
    ($freelist_size : tt, $T : ty, [$default_value : expr; $heap_size : expr], global, $name : ident) => { ... };
}