#define new の罠

STLはとても便利&強力なC++の標準ライブラリで、かなりお世話になるんですが、エラーが難解なことで有名でもある。
VisualStudioで開発してて、ハマった「わかると、何でもないエラー」をメモしておく。

template,
typename alloc=std::allocator >
class Hoge
{
…略

こんなテンプレートクラスを定義して、このクラスを使おうとして出たエラー。

xmemory(44) : error C2665: 'operator new' : 5 オーバーロードのどれも、すべての引数の型を変換できませんでした

これ。

operator new がどうやら正常に動いていないという。
でも、クラスの定義を確認してもとくにおかしな点はない。

うーん、、、

ううーん、、、


と2時間ほど悩まされた原因が、

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

#include "Hoge.h"

こいつだったと知った時、がっくり来ました orz

#include "Hoge.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

これで解決。

まさか、こんな近くに原因があるとわ…
灯台なんとかっていうし、意外と見落としがちだから気をつけよう。っていう自分への備忘録。

【関連記事】
[C++]atldbgmem.h
(ここでヒントをもらいました。ありがとうございます。)