2012-12-22 8 views
52

fand ich Code here, die ungefähr so ​​aussah:Was macht 'void()' in 'auto f (params) -> decltype (..., void())'?

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

In allen Unterlagen Ich las ich mir wurde gesagt, dass decltype unterzeichnet als:

decltype(entity)

oder

decltype(expression)

Und es gibt kein zweites Argument irgendwo. Zumindest ist das auf cppreference hingewiesen. Ist das ein zweites Argument zu decltype? Und wenn ja, was macht es?

Antwort

71

Da es ein Ausdruck ist, dass Komma einfach der Komma-Operator ist (dh der Typ ist der Typ der rechten Seite: void), kein weiteres Argument.

Dieser Code verwendet SFINAE - es ist aktiviert, wenn t.reserve(n) existiert, aber der Rückgabetyp wie void beibehalten werden soll.

+0

hätte ich nie gedacht. Vielen Dank. –

+5

@templateboy: Der Komma-Operator springt immer an den meisten unerwarteten Stellen auf;) –

+9

OMG Wir brauchen dringend Sprachkonstrukte, um solche Tricks nicht schreiben zu müssen! O__O ;;; – Klaim

Verwandte Themen