使用模板和lambda的汇编误差与clang
Compilation error with template and lambda with Clang
我试图用看起来像
的代码编译一个项目#include <tuple>
#include <utility>
struct Foo
{
};
template <typename... Args>
void start(Args&&... args) {
auto x = [args = std::make_tuple(std::forward<Args>(args)...)] () mutable {
auto y = [args] () mutable {
auto z = [] (Args&&... args) {
return new Foo(std::forward<Args>(args)...);
};
};
};
}
int main()
{
start(Foo{});
}
它似乎在GCC 4.9.1中填充了,但在Clang 3.4、3.5、3.6中却没有编译。错误消息是
错误:变量'args'不能在lambda中隐式捕获 未指定捕获默认
是编译器错误吗?如果是这样,是否有任何解决方法可以使其在Clang上进行编译?
降低到:
template <typename T>
void start(T t) {
[a = t] { [a]{}; };
}
int main()
{
start(0);
}
在clang的非陷阱版本中生成相同的错误。
这似乎是由Clang处理非本地捕获的错误引起的。所述错误是昨天(5月7日)修复的,当前的TRUNK版本正确编译了上面的代码。
由于此错误仅适用于初始化的非本质捕获,因此一个简单的解决方法是在内部lambda中使用初始化 - 而不是 [a]
,do [a = a]
。
相关文章:
- 为什么在浮点中从大到小会引入更多的误差
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 在 emscripten 网页汇编正在运行期间更新进度条?
- 为什么我们不编写可以处理C++标识符的汇编器和链接器?
- 在什么情况下,我想在 C/C++ 代码中使用内联汇编代码
- 为什么 memcpy() 和其他类似的函数使用汇编?
- [[可能]]和[[不太可能]]影响程序汇编的简单示例?
- 基于相邻元素 c++ 的分段误差范围的循环
- 在Cython中使用移动方法时的汇编误差
- typedef void汇编误差(是初始化的(使用dectType))
- C (MACOS)的汇编误差
- 使用C 中的constexpr汇编误差
- MSYS2上使用GCC 8.2.1的本本汇编误差
- 使用MPIC 误差进行C 汇编
- 传递variadic arg to模板函数时的汇编误差
- 汇编误差:从CSV转换为LIBSVM格式
- variadic模板递归返回类型扣除汇编误差
- 使用模板和lambda的汇编误差与clang
- Boost ::几何3D多边形交叉汇编误差
- 无序的一组对,汇编误差