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