basically how to make following code compile?
I know it failed because compiler was trying to evaluate something like ([](int &i){})(0)
but how to solve the problem?
template <class TElement>
struct foo {
TElement _e;
foo(TElement e) : _e(e){}
template <class Lambda>
void bar(Lambda f) {
using TResult = decltype(std::declval<Lambda>()(std::declval<TElement>()));
}
};
int main() {
foo<int>(0).bar([](int i){}); // compile
foo<int>(0).bar([](int &&i){}); // compile
foo<int>(0).bar([](int const &i){}); // compile
foo<int>(0).bar([](int &i){}); // failed
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…