os, T value) -> std::size_t
{
trailing return type ничего не делает, кроме того, что позволяет писать возвращаемый тип после параметров (иногда это важно)
А можно в пример кейс использования?
template<typename F> auto foo(F&& f) -> decltype(void(f())) {} int main(int argc, char *argv[]) { foo([]{}); }
template<typename T, typename U> auto add(T t, U u) -> decltype(t + u); без trailing return type пришлось бы городить что-то такое: template<typename T, typename U> decltype(std::declval<T>() + std::declval<U>()) add(T t, U u); из приятных мелочей: auto foo() -> int auto bar() -> std::vector<int> auto baz() -> std::unordered_map<std::string, std::string> названия функций красиво выровнены вне зависимости от длины названия возвращаемого типа
Теперь вопрос по decltype:
Обсуждают сегодня