在C ++可变参数lambda中使用“auto”关键字?

时间:2017-04-22 07:34:04

标签: c++ lambda c++14 variadic-templates auto

我最近发现这段代码在GCC和MSVC中编译都很好:

auto foo = [](...){
    cout << "foo() called" << endl;
};

它接受任意数量的任何参数,并且对这些参数不做任何操作,因此它就像auto之前放置了...一样:

// All of these lines will call the lambda function
foo();
foo(100);
foo("Test");
foo("Testing", 1, 2, 3);

关于lambda functions的C ++参考文献似乎没有提到这一点,parameter packs上的页面也没有提及。

更令人惊讶的是,这无法编译:

auto foo = [](... x){ // compile error
    cout << "foo() called" << endl;
};

这种行为是否由标准规定,如果是这样,为什么前者编译而后者失败?

1 个答案:

答案 0 :(得分:9)

这只是简单的旧类型 - 不安全的C风格variadic arguments