Я как бы предполагал, что диапазон, основанный на циклах for, будет поддерживать строки в стиле C.
void print_C_str(const char* str)
{
for(char c : str)
{
cout << c;
}
}
Однако это не так, стандарт [stmt.ranged] (6.5.4)
говорит, что range-based-for работает в одном из трех вариантов:
- Диапазон представляет собой массив
- Диапазон представляет собой класс с вызываемыми методами
begin
иend
. - Доступен ADL в связанном пространстве имен (плюс пространство имен
std
)
Когда я добавляю функции begin
и end
для const char*
в глобальное пространство имен, я все равно получаю ошибки (как из VS12, так и из GCC 4.7).
Есть ли способ заставить циклы for на основе диапазона работать со строками в стиле C?
Я попытался добавить перегрузку к namespace std
, и это сработало, но, насколько я понимаю, добавление перегрузок к namespace std
незаконно (это правильно?)