Почему оптимизация GCC не работает с valarrays?

Это простая программа на C ++, использующая valarrays:

#include <iostream>
#include <valarray>

int main() {
    using ratios_t = std::valarray<float>;

    ratios_t a{0.5, 1, 2};
    const auto& res ( ratios_t::value_type(256) / a );
    for(const auto& r : ratios_t{res})
        std::cout << r << " " << std::endl;
    return 0;  
}

Если я скомпилирую и запустлю это так:

g++ -O0 main.cpp && ./a.out

Результат, как и ожидалось:

512 256 128 

Однако, если я скомпилирую и запусту его так:

g++ -O3 main.cpp && ./a.out

Выход:

0 0 0 

То же самое происходит, если я использую-O1 параметр оптимизации.

Версия GCC (последняя в Archlinux):

$ g++ --version
g++ (GCC) 6.1.1 20160707

Однако, если я попробую с Clang, оба

clang++ -std=gnu++14 -O0 main.cpp && ./a.out

а также

clang++ -std=gnu++14 -O3 main.cpp && ./a.out

дать тот же правильный результат:

512 256 128 

Версия Clang:

$ clang++ --version
clang version 3.8.0 (tags/RELEASE_380/final)

Я также пытался с GCC 4.9.2 на Debian, где исполняемый файл дает правильный результат.

Это возможная ошибка в GCC или я делаю что-то не так? Кто-нибудь может воспроизвести это?

РЕДАКТИРОВАТЬ: Мне удалось воспроизвести проблему также на Homebrew версии GCC 6 для Mac OS.

Ответы на вопрос(2)

Ваш ответ на вопрос