У меня такой код:
template<class ListItem>
static void printList(QList<ListItem>* list)
{
for (auto i = list->size() - 1, j = -1; i >= 0; --i) {
std::cout << i << ", " << j << ": " << list->at(i) << std::endl;
}
}
Когда я скомпилирую его с помощью g++ 6.2.1, я получаю следующий вывод компилятора:
test.cpp: In function ‘void printList(QList<T>*)’:
test.cpp:10:7: error: inconsistent deduction for ‘auto’: ‘auto’ and then ‘int’
for (auto i = list->size() - 1, j = -1; i >= 0; --i) {
^~~~
Я бы это понял, если переменные имели разные типы, такие как auto i = 0.0, j = 0;
, но в этом случае список является указателем на QList, а метод size() возвращает int
, -1
сам по себе должен быть int
, тоже. Сообщение об ошибке также немного странно.
Переменные i
и j
нужны только в этом цикле, и я хотел бы объявить их как параметры цикла. Не печатать int
вместо auto, но я хотел бы знать: is auto
не предполагается использовать для объявления нескольких переменных за один раз, или я чего-то здесь не вижу, и это действительно ошибочный код, или, возможно, это ошибка компилятора?
P.S. Похоже, что использование функции шаблона является важной частью здесь, факторинг цикла из шаблона не приводит к ошибкам. Итак, больше похоже на ошибку в компиляторе?