Помогите пожалуйста начавшему изучать C++. Никак не могу вдуплить в чем дело. Код:


#include <iostream>
#include <tuple>

class Channel
{
public:
Channel() : x(0) {}
Channel(float x) : x(x) {}
float x;
};

template <typename... Args> class Bus
{
public:
Bus(Args&& ...args) : x{args...} {}
std::tuple<Args&...> x;
};

int main()
{
Channel ch1;
Bus<Channel, Channel> bus1((Channel(2.5)), (Channel(1.3)));

std::cout << std::get<0>(bus1.x).x << std::endl;
std::cout << std::get<1>(bus1.x).x << std::endl;
}


Проблема вот в чем - отличаются значения std::get<0>(bus1.x).x, std::get<1>(bus1.x).x


По моему разумению, должно получаться 2.5, 1.3. С clang все работает как я ожидаю, выдается 1.3. С gcc - только ели собрать с -O0 или -Og. Иначе выдается ноль.


Подскажите, в чем тут проблема? Видимо я не понимаю какой-то элементарной вещи, ну не должно же такого происходить?


Вот оно https://godbolt.org/z/a4h6Ms









 , ,






URL записи