Boost Spirit での rule では二つ目のテンプレート変数の括弧を忘れないように2021年04月04日 11時03分11秒

Boost Spirit は既に X3 に置き換えられてはいるが、構文によっては移行は簡単でもない。

qi::rule では、第一引数に iterator、第二引数に読み込む型、第三引数に skipper 等と渡していく。

qi::rule< Iterator, std::string(), Skipper > name_;
この二つ目の引数は、初期化の式らしく、ここで括弧を忘れると延々と続く、分かりづらいエラーになるのに最近になって気が付いた。

加えて、第二引き数がプリミティブ型だと、括弧を忘れてもコンパイルには影響が無いようで、一行足した後に不可解なエラーを見るようになって、前後に括弧無しの行があったりすると深みにはまる。

クラス型でも括弧を忘れてもコンパイル出来ているケースが手元であった。実はこの場合の違いは把握仕切れていない。ただ、括弧を付けていてエラーになることはないので、余計なエラーを避ける習慣として気を付けている。