Почему нельзя использовать 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?

0 ответов

Другие вопросы по тегам