GCC vs CLANG:将捕获的参数包扩展两次
gcc vs clang: expanding a captured parameter pack twice
考虑以下代码片段:
int main () {
auto first = [&] (auto... one) {
auto faulty = [&] () {
[[maybe_unused]] auto i = (one + ...);
return (one + ...);
};
faulty();
};
first(1);
}
另请参阅Godbolt。
似乎当我尝试在内部 lambda 中将隐式捕获的参数包one
扩展两次时,gcc 抱怨,但 clang 没有。请注意,当我明确捕获时,就像[&one...]
一样,gcc 不再抱怨了。
对我来说,这看起来像一个 gcc 错误,但我希望得到比我更有经验的人的确认,因为我已经在这里看到了带有可变参数捕获的 clang 中的(不同的(错误行为。
这是
GCC 9中的回归。据报道。
GCC 8 可以很好地编译代码。
相关文章:
- g++的分段错误(在NaN上使用to_string两次时)
- 蛇在C++不会连续转两次
- 检查一个数组是否包含在另一个数组中,以相反的顺序,至少两次
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 我应该如何去缓解两次出现的cin?
- Realloc 两次无法在 Visual Studio 上运行
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++析构函数调用两次,堆栈分配的复合对象
- 为什么参数在构造 std::thread 时移动两次
- Qt插槽调用了两次
- 做 std::用相同的unique_ptr移动两次
- C++两次定义相同的函数会导致错误
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 对于优化级别为 0 的 std::vector,析构函数被调用两次
- 使用柯南打包时如何避免列出两次依赖?
- 为什么要执行两次位移((x >> 4)<< 4)?
- GCC vs CLANG:将捕获的参数包扩展两次
- C 节点本机扩展调用方法两次
- 在资源管理器左窗格上两次调用Windows 7外壳扩展dll Initialize方法