LINUX.ORG.RU

GCC vs Clang разный результат

 , ,


0

3

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

★★★★★
Ответ на: комментарий от curufinwe

человек который пишет этот код через месяц сам в нём не разберётся. затем это наслаивается на другой код в таком же стиле и совокупная сложность вырастает экспоненциально. в большинстве случаев это write-only и используется только если нет другого выхода.

anonymous
()
Ответ на: комментарий от curufinwe

о вообще мета-программирование - это плохая примета в любом случае

А почему такое мнение?

Вы серьезно интересуетесь неверифицирумым мнением хз какого нонейма из интернета?

eao197 ★★★★★
()
Ответ на: комментарий от anonymous

А от чего тут гореть

От того, что копия должна быть disjoint. По крайней мере для trivially copyable типов.

Хотя я тут смотрю, такая структура не будет Regular, так что… может и не горит.

anonymous
()
Ответ на: комментарий от curufinwe

Не флейма ради, а правда интересно. Вот у вас опыта в C++ нет. И как вы будете верифицировать это высказывание:

человек который пишет этот код через месяц сам в нём не разберётся. затем это наслаивается на другой код в таком же стиле и совокупная сложность вырастает экспоненциально. в большинстве случаев это write-only и используется только если нет другого выхода.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Буду изучать и использовать C++ пока не сложится собственное мнение.

Но если бы мне 10 человек в один голос сказали бы одно и тоже про ненужность, я бы задумался. Благо, такого не происходит.

curufinwe ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Ну вот, а говорят что форум плохой. Так хорошо помогли в этом треде.

@eao197 спасибо еще раз.

curufinwe ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.