Considérons les deux fonctions lambda dans 10,0 code du VC suivant:C++ 0x lambda valeur de retour des règles de type-inférence
template <typename T>
void eq(uint fieldno, T value) {
table* index_table = db.get_index_table(fieldno);
if (index_table == nullptr) return;
std::set<uint> recs;
index_table->scan_index<T>(value, [&](uint recno, T n)->bool {
if (n != value) return false;
recs.insert(recno);
return true;
});
add_scalar_hits(fieldno, recs).is_hit =
[=](tools::wsdb::field_instance_t& inst) {
return boost::get<T>(inst) == value;
};
}
Dans la première fonction lambda, je suis obligé d'utiliser la spécification de type ->bool
de retour alors que dans le deuxième lambda le compilateur était parfaitement heureux de déduire le type de retour.
Ma question est: quand le compilateur peut-il déduire le type de retour sur un lambda? Est-ce seulement quand vous avez un simple doublure?