В этом случае все равно придётся передавать int, т.е. std::vector. А автор спрашивал, как избавиться от указания конкретного типа значения элемента контейнера, т.е. int.
Именно об этом я и говорил. В данном случае источник технического долга (уже существующего) — не вы. И как вы будете по нему «расплачиваться» — regexp'ом, предварительным приведением к корректному виду или как-то еще — не важно. Потому это и неважно в контексте вопроса…
Есть ли случаи, кроме уже описанных (валидация данных или костыли, как у вас), когда использование regexp не порождает технического долга.
Здесь, несомненно, классический пример технического долга.
И регулярные выражения здесь почти не при чем — долг родился там, где генерируются данные, которые вам нужно обрабатывать, а вы всего лишь, от безысходности, использовали регулярные выражения. Вряд ли бы вы, если бы это был ваш проект, применили такое решение — намного более логичным и очевидным здесь видится приведение в порядок данных.
Таким образом, данный пример вообще не может рассматриваться в контексте этого вопроса, как мне кажется.
Мне же интересно именно полезное применение регулярных выражений в проектах без накопления технического долга, кроме уже обозначенной выше валидации данных.
Можно, конечно, вытащить только нужный кусок, в данном случае сначала надо узнать причины почему именно нельзя использовать boost. Кстати, для boost.function & boost.bind не нужно компилировать буст (все на хедерах).