55

我在这里找到了看起来像这样的代码:

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

在我阅读的所有文档中,我被告知decltype签名为:

decltype( entity )

或者

decltype( expression )

并且在任何地方都没有第二个论点。至少这是cppreference所指出的。这是第二个论点decltype吗?如果是这样,它有什么作用?

4

1 回答 1

73

因为它是一个表达式,逗号只是逗号运算符(意​​味着类型是 rhs 侧的类型:)void,而不是另一个参数。

该代码正在使用 SFINAE - 如果t.reserve(n)存在则启用它,但它希望将返回类型保持为void.

于 2012-12-22T13:49:48.830 回答