2012-12-22 11 views
52

私はこのような何かに見えたコードhereが見つかりました:'auto f(params) - > decltype(...、void())'の 'void()'は何をしますか?

decltype(entity)

または

:私は decltypeは以下のように署名されていることを言われた私が読んで、すべてのドキュメントで

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

decltype(expression)

そして、第2引数はどこにもありません。少なくともそれはcppreferenceに指摘されています。これはdecltypeの2番目の引数ですか?もしそうなら、それはどうしますか?

答えて

71

カンマは単純にコンマ演算子です(この型はrhs側の型です:void)。別の引数ではありません。

そのコードはSFINAEを使用しています。t.reserve(n)が存在する場合は有効ですが、戻り値のタイプはvoidのままにしておきたいと考えています。

+0

私は決して推測できませんでした。ありがとう。 –

+5

@templateboy:コンマ演算子は常に予期しない場所で発生します;) –

+9

OMG私たちは真剣にそのようなハックトリックを書く必要はありません言語の構造が必要です! O__O ;;; – Klaim

関連する問題