我最近发现这段代码在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;
};
这种行为是否由标准规定,如果是这样,为什么前者编译而后者失败?