如何制作可变lambda
How to make a variadic lambda?
当我尝试制作可变lambda:时
#include <cstdarg>
int main() {
[] (int x, ...) { va_list xs; va_start(xs, x); va_end(xs); };
return 0;
}
有了GCC,它编译得很好,但clang拒绝了它:
main.cpp:4:35:错误:在具有固定参数的函数中使用了"va_start"[](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;
}
变量lambda似乎是允许的-指定参数的语法与任何其他函数声明所使用的参数声明子句相同,并且没有特定规则禁止它以省略号结尾。(C++11确实禁止默认参数,但不禁止省略号,并且在C++14中删除了该限制。)
在任何情况下,如果存在内部编译器错误(我认为这就是你所说的ICE),那么这意味着编译器有一个错误,无论代码的正确性如何。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何在c++17中制作一个模板包装器/装饰器
- 可组合的lambda/std::函数与std::可选
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 函数何时会在c++中包含stack_Unwind_Resume调用
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 如何制作一个将函数作为参数的类方法
- 如何从unique_ptr制作static_cast
- Python中的for循环与C++有何不同
- 下面是我为检测链接列表中的循环而制作的代码
- 如何将lambda作为模板类的成员函数参数
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 如何使用gdb制作一个可以漂亮地打印每个对象的C++函数
- 在 lambda 捕获中声明的变量的类型推导
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 模板函数指针和lambda
- 如何制作可以接受任何类型的参数的 std::函数和 lambda
- 如何制作可变lambda