Давайте переформулируем задачу: на входе есть список параметров с типами (Args... args), как его разделить на две части, где разделителем выступает конкретный тип S. И вызвать две функции f0(S, то что после S...) и f1(то что перед S)
Напиши обертку над index_sequence вида indexate_before<T, Ts...> и indexate_after<T, size_t, Ts...>
А вообще - посмотрите на boost.pp, там же все примитивы программирования на лицо :))
Распарсить на набор символов через шаблоны можно, но проблема-то в том что надо как-то сохранить выражение. Если выражение передавать отдельным параметром макроса, то это примерно то же что iostreams.