Re: Що виведе програма?
wander написав:ur_naz написав:спочатку інт потім флоат.
Що ж, справді, вивід буде▼Прихований текстur_naz написав:компілятор с++ обчислює аргументи зправа наліво
Але не через це. Почнімо з того, що компілятор С++ може передавати (не обчислювати, коли обчислює це зовсім інше, це вже order of evaluation) аргументи в функцію, як зправа наліво, так і зліва направо (це implementation-defined), а також, в цьому випадку це немає ніякого значення. Якщо ви про Fold Expression, то він завжди зліва направо. Це ж елементарні речі.
Єдиний компілятор на рекстестері, який не фейлить при компіляції цього - g++, інші кажуть, що не можуть кастовать int
Не знаю, що саме ви тестили, але у мене gcc i clang все виводять вірно, лиш студійний компайлер фейлиться, але це не дивно (враховуючи яка там версія).
Так на всякий
void g(auto&&... // << не стандартне розширення, яке стандартизоване лише в С++20, на рекстестері підтримується максимум C++14
Аналог мого коду для С++14:
#include <stdio.h>
void f(float&&) { puts("float"); }
void f(int&&) { puts("int"); }
template <typename... Args>
void g(Args&&... v) { (f(v), ...); }
int main() { g(1.0f, 2); }