Рассмотрим две лямбда-функции в следующем коде VC ++ 10.0:
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;
};
}
В первой лямбда-функции я был вынужден использовать спецификацию ->bool
возвращаемого типа, тогда как во второй лямбда-компилятор был совершенно счастлив вывести тип возвращаемого значения.
Мой вопрос: когда компилятор может определить тип возврата лямбды? Разве только если у вас есть простой однострочник?