gdbmをg++で使うとg++のバグらしきものを踏むっぽい。
無名名前空間なんて使ってないのに下みたいな言いがかりを付けられる。
db.h:12:7: エラー: ‘DB’ has a field ‘DB::db’ whose type uses the anonymous namespace [-Werror]
このdbってメンバはGDBM_FILE型で、GDBM_FILEは/usr/include/gdbm.hあたりで下のように定義されている。
typedef struct {int dummy[10];} *GDBM_FILE;
で、GDBM_FILEの定義を例えば下のように変更して構造体に名前を付けてやれば回避できる。
typedef struct _GDBM_FILE_ {int dummy[10];} *GDBM_FILE;
なぜか無名構造体を無名名前空間と混同しているようだ。
ちなみに「extern "C"」で囲っても無駄だった。
それにしても構造体のメンバではなく構造体自体が無名名前空間にあるとか文句を言われるってのが謎だなぁ。