Как проще всего создать локальную переменную того же типа, что и выведенный аргумент?

А именно:

[](auto const& foo) {
??? bar; // should be same base type as foo, minus const&
}

Пока что я использую:

typename std::remove_const<typename std::remove_reference<decltype(foo)>::type>::type combination

Но я действительно надеюсь, что есть более легкая альтернатива!

8

Решение

std::decay<decltype(whatever)>::type, или же decay_t если твой std библиотека была обновлена ​​с ним.

Он эмулирует различные виды затухания аргументов функций. Он обрабатывает, если ваш аргумент был ссылкой на функцию. При ссылке на массив он также создает указатель, который менее идеален.

Если вы хотите справиться с этим по-другому, вам придется свернуть свои собственные.

10

Другие решения