Подтвердить что ты не робот

Что делает 'void()' в 'auto f (params) → decltype (..., void())?

Я нашел код здесь, который выглядел примерно так:

auto f(T& t, size_t n) -> decltype(t.reserve(n), void()) { .. }

Во всей документации, которую я прочитал, мне сказали, что decltype подписан как:

decltype( entity )

или

decltype( expression )

И нет второго аргумента. По крайней мере, то, на что указывает cppreference. Является ли это вторым аргументом для decltype? И если да, что он делает?

4b9b3361

Ответ 1

Так как это выражение, то запятая является просто оператором запятой (это означает, что тип является типом стороны rhs: void), а не другим аргументом.

Этот код использует SFINAE - он включен, если существует t.reserve(n), но он хочет сохранить возвращаемый тип как void.