'auto f(params) - '中的'void()'是什么? decltype(...,void())'吗?

时间:2012-12-22 13:48:31

标签: c++ c++11 sfinae decltype trailing-return-type

我发现代码here看起来像这样:

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

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

  

decltype( entity )

  

decltype( expression )

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

1 个答案:

答案 0 :(得分:71)

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

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