2012-12-22 63 views
52

我發現代碼here,看上去是這樣的:'auto f(params) - > decltype(...,void())'中的'void()'是做什麼的?

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

在所有我看過有人告訴我,decltype簽署的文件爲:

decltype(entity)

decltype(expression)

而且在任何地方都沒有第二個參數。至少這是cppreference上指出的內容。這是decltype的第二個參數嗎?如果是這樣,它有什麼作用?

回答

71

由於它是逗號只是逗號運算符(表示類型是rhs側的類型:void),而不是另一個參數。

該代碼正在使用SFINAE - 如果存在t.reserve(n),則啓用它,但它希望將返回類型保留爲void

+0

我永遠不會猜到。謝謝。 –

+5

@templateboy:逗號運算符總是出現在最意想不到的地方;) –

+9

OMG我們非常需要語言結構而不必編寫這樣的hacky技巧! O__O ;;; – Klaim

相關問題