内联lambda表达式导致编译器错误

时间:2012-08-03 03:00:40

标签: c++ gcc lambda c++11

template <typename T, typename Y, typename... Args>
class Bar
{
    T& t;
public:
    Bar(T& t) : t(t) { }
};

template <typename T, typename... Args>
void Foo(T &function) { new Bar<T, void, Args...>(function); }

int main()
{
    auto foo = [] { };
    Foo(foo); // ok

    Foo([] { }); // fails (tested on GCC 4.5.3)
}

为什么只有当lambda表达式内联作为Foo的参数写入时才会失败?

1 个答案:

答案 0 :(得分:5)

template <typename T, typename... Args>
void Foo(T &function) { new Bar<T, void, Args...>(function); }

Foo([] { }); // fails (tested on GCC 4.5.3)

Lambda是暂时的。不要尝试绑定临时引用。使用值,或const-reference或rvalue-reference。