Boehm GC c++

Boehm GCc++から使っていて気付いたことがある。globalなnewとdeleteの位置が違うのだ(gc-7.0.tar.gz)。
gc_cpp.ccでは

void* operator new( size_t size ) {
    return GC_MALLOC_UNCOLLECTABLE( size );}

void operator delete( void* obj ) {
    GC_FREE( obj );}

と定義されている。ライブラリのコンパイル時にGC_DEBUGフラグが評価されるので、自由にフラグを切替えられない。
それに対してgc_cpp.hでは

inline void* operator new(
    size_t size,
    GCPlacement gcp,
    GCCleanUpFunc cleanup,
    void* clientData )
{
    void* obj;

    if (gcp == UseGC) {
        obj = GC_MALLOC( size );
        if (cleanup != 0)
            GC_REGISTER_FINALIZER_IGNORE_SELF(
                obj, cleanup, clientData, 0, 0 );}
    else if (gcp == PointerFreeGC) {
        obj = GC_MALLOC_ATOMIC( size );}
    else {
        obj = GC_MALLOC_UNCOLLECTABLE( size );};
    return obj;}

と定義している。ユーザープログラムのコンパイル時にGC_DEBUGフラグが評価されるので、こちらは自由にフラグを切替えられる。
そのため、

#define GC_DEBUG
#include <gc/gc_cpp.h>

int main() {
  GC_INIT();
  int *pi = new(PointerFreeGC)int(1);
  delete pi;
  return 0;
}

のようにすると不整合が起きてしまう。何故こうなっているのかは判らないが、gc_cpp.ccの内容をgc_cpp.hに移した方が良さそうに思う。