Почему нельзя использовать auto & list initialization вместе до g++ 5.1.0?
Рассмотрим следующую программу:
#include <iostream>
int main()
{
int n;
int fact{1};
std::cout<<"Enter a number: ";
std::cin>>n;
for(auto i{1};i<=n;i++)
fact*=i;
std::cout<<"fact of "<<n<<" is "<<fact;
}
Мой компилятор g++ 4.8.1 выдает следующие ошибки компиляции (я включил только сообщения об ошибках, но см. Здесь полную диагностику, показанную компилятором):
8 17 [Error] no match for 'operator<=' (operand types are 'std::initializer_list<int>' and 'int')
8 22 [Error] no 'operator++(int)' declared for postfix '++' [-fpermissive]
9 7 [Error] no match for 'operator*=' (operand types are 'int' and 'std::initializer_list<int>')
Я пробовал это на g++ 4.8.1, 4.8.2, 4.9.0, 4.9.1 и 4.9.2 & все дает ту же ошибку компиляции, как я показал выше. Но g ++ 5.1.0 и выше успешно компилирует эту программу и дает желаемый результат. (Смотрите живое демо здесь).
Итак, это ошибка в g ++ или что-то еще? Почему эта программа была отклонена компиляторами до g++ 5.1.0?