rig*_*old 15 c++ lambda gcc clang variadic-functions
当我尝试制作一个可变的lambda:
#include <cstdarg>
int main() {
[] (int x, ...) { va_list xs; va_start(xs, x); va_end(xs); };
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有了海湾合作委员会这个编译很好,但是clang拒绝它:
main.cpp:4:35: error: 'va_start' used in function with fixed args
[] (int x, ...) { va_list xs; va_start(xs, x); va_end(xs); };
^
哪个编译器在这里正确?是否可以制作一个可变的lambda?
奇怪的是,以下结果导致了一个带有clang的ICE,所以看起来clang正在使用变量:
int f(...) {
[] (int x, ...) { va_list xs; va_start(xs, x); va_end(xs); };
return;
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*our 10
似乎允许使用变量lambda - 指定参数的语法与任何其他函数声明使用的参数声明子句相同,并且没有特定的规则禁止以省略号结尾.(C++ 11确实禁止默认参数,但不禁用省略号,并且在C++ 14中删除了该限制.)
在任何情况下,如果存在内部编译器错误(我假设你是ICE的意思),那么这意味着编译器有一个错误,无论代码的正确性如何.