Декларация to_upper_copy
:
template<typename SequenceT>
SequenceT to_upper_copy(const SequenceT &, const std::locale & = std::locale());
Из этого должно быть ясно, что SequenceT
не может быть указателем на символ или даже массивом символов, потому что нет (хорошего) способа, как возвращаемая копия могла бы иметь такой же тип.
Вы можете явно указать тип string
:
string str_up = boost::to_upper_copy<string>(str);
Вот объяснение того, что SequenceT
и RangeT
означают в документации: Представление строки . Короче говоря, ни один из них не может быть const char*
, но RangeT
аргументы принимают массивы (char [X]
).