基本上如何使以下代码编译通过?
我知道它失败了,因为编译器试图评估类似于([](int &i){})(0)
的东西,但如何解决这个问题呢?
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
}
foo<int&>(i).bar([](int &i){});
。 - Jarod42foo<int&>(0)
不会编译。 - Bryan Chen