Это не прямой ответ на ваш вопрос, но разве вы не считаете, что использование простой старой функции проще и проще использовать, чем писать полномасштабный манипулятор?
#include <sstream>
template<typename T>
std::string plusone(T const& t) {
std::ostringstream oss;
oss << (t + 1);
return oss.str();
}
Использование:
cout << plusone(42);
Под «clear to use» я подразумеваю, что пользователю не нужно спрашивать себя: «Это влияет только на следующий элемент или все последующие элементы?» Из проверки видно, что затронут только аргумент функции.
(Для примера plusone()
вы можете упростить еще больше, просто вернув T
вместо этого, но вернув std::string
общий случай.)