解析目的で、テンプレート識別子リストの内容をスキップしたいとしましょう:
template<(valid code)>
^ ^
| from | to
最初に頭に浮かぶのは、盲目的に最初の > を見つけることですが、それが常に機能するとは限りません。
template<(valid code),template<(valid code)> >
^ ^
| from | to, oops
より良いアプローチは、再帰的に < と > のペアをスキップすることです:
template<(valid code),template<(valid code)> >
^ ^
| from | to, better
ただし、このアプローチでさえ、次のような難解だが有効な傑作には失敗します (bits\random.h、69 行目、GCC 4.7.x から):
template<(...),bool = __w < static_cast<size_t>(...)>
^ ^ ^ ^ ^ ^
| 1 | 2 | 3 | 2 | 1 | where did 0 go?
私の質問は、有効なテンプレート識別子リストの最後を見つける正しい方法は何ですか?