Что делает '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
? И если да, что он делает?
Ответы
Ответ 1
Так как это выражение, то запятая является просто оператором запятой (это означает, что тип является типом стороны rhs: void
), а не другим аргументом.
Этот код использует SFINAE - он включен, если существует t.reserve(n)
, но он хочет сохранить возвращаемый тип как void
.