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