Я написал printf
функцию, используя std::initializer_list
:
template<typename T, typename... Ts>
auto printf(T t, Ts... args) {
std::cout << t << std::endl;
return std::initializer_list<T>{([&] {
std::cout << args << std::endl;
}(), t)...};
}
int main() {
printf(111, 123, "alpha", 1.2);
return 0;
}
Компилятор делает заметку об экземпляре специализации шаблона функции:
warning: returning address of local temporary object [-Wreturn-stack-address]
return std::initializer_list<T>{([&] {
^~~~~~~
note: in instantiation of function template specialization 'printf<int, int, const char *, double>' requested here
printf(111, 123, "alpha", 1.2);
Я знаю о возврате стекаадрес - плохая практика, однако, если я не верну, то получу:
warning: expression result unused [-Wunused-value]
Как я могу изменить свой код, чтобы избежать этих трех типов предупреждений компилятора?