Код: Выделить всё
#include
template
void g(std::tuple args) {}
int main() {
g({1, 'a', 0.4}); // does not work
g({1, 'a', 0.4}); // works
g(std::tuple{1, 'a', 0.4}); // works
}
Это уже удивительно, потому что я ожидал, что он выведет тип std :: tuple . Дальнейшие исследования показали, что компилятор может правильно вывести тип std :: initializer_list в следующем: < /p>
Код: Выделить всё
#include
template
void f(std::initializer_list arg) {}
int main() {
f({1, 2, 3}); // works
f({1, 2, 3}); // works
f(std::initializer_list{1, 2, 3}); // works
}
< /code>
Это очень близко к фактической цели, но она работает только в том случае, если типы объектов в списке одинаковы. Мой первый подход состоял в том, чтобы посмотреть на реализацию std :: initializer_list и реализовать его сам, но я даже не получаю линию F ({1, 2, 3});
Возможно ли реализовать свой собственный init_list SO f ({1, 2, 3}); < /code>, когда F принимает пользовательский init_list в качестве аргумента? 0.4}); работа?>
Подробнее здесь: https://stackoverflow.com/questions/763 ... o-function