Boost.Spirit.Qiの内部でnilという名前のクラスが使われているので、Objective-C++の文脈(.mm拡張子のソースファイルや、.mmでインクルードされる.h)でこれを使おうとすると、Objective-Cのnilキーワードと衝突してコンパイルエラーになります。 このため、Boost.Spirit.Qiを使うには、.cpp拡張子のソースファイルを作ってC++の文脈で使わなければなりません。 Objective-C++の文脈でBoost.Spirit.Qiを使いたい場合には、Boost.Spirit.Qiの内部で使われているnilの名前を外部から無理矢理書き換えることで、nilとの衝突を回避することができます。 以下がその方法です。 // 一旦nilを消して #if defined(nil) #undef nil #endif // Spirit内のnilに別名を付けて