c++ - 围绕变量“...”的堆栈已损坏
问题描述
在调试模式下的 MSVC 15.8.5 上,我明白了
运行时检查失败 #2 - 变量“insert_into”周围的堆栈已损坏。
MSVC 中是否存在错误或我做错了什么?
在 clang 版本 6.0.0-1ubuntu2 和 clang 版本 7.0.0-svn341916-1~exp1~20180911115939.26 上运行良好
#include <set>
template <typename... T>
struct Overload : T...
{
//support struct for combining and overloading multiple lambdas
using T::operator()...;
};
template <typename... T>
Overload(T...)->Overload<T...>;
using BuiltSet = std::set<std::string>;
template <typename... Args>
BuiltSet MakeBuildSet(const Args&... args)
{
//takes a list of arguments if an argument is a
// BuiltSet each element is added to headers,
// otherwise the arg itself is added to headers
BuiltSet headers{};
//Construct a lambda with overloading on if argument is a BuiltSet or not
const Overload insert_into{
[](const BuiltSet& h, BuiltSet& headers) {
headers.insert(h.begin(), h.end());
},
[](const auto& arg, BuiltSet& headers) {
headers.insert(arg);
}
};
//Fold over arguments applying the lambda on each element
(insert_into(args, headers), ...);
return headers;
}
int main(int argc, char** argv)
{
MakeBuildSet(MakeBuildSet("a", "b", "c"), "a", "b", "c");
return 0;
}
解决方案
MSVC 错误,因此它是编译器中的一个缺陷。
推荐阅读
- python - 如何绘制数据,x轴上的时间而不是日期时间
- c# - 从c#中的其他方法调用以下函数时如何传递函数参数
- javascript - highchart 热图类型错误:无法将未定义转换为对象
- json - Fetch SyntaxError: Unexpected token < in JSON at position 0
- angular - 错误类型错误:在 innerhtml 中解析脚本时无法读取未定义的属性“文档”
- ruby-on-rails - activeadmin 和动态存储访问器在新资源上失败
- java - 在jsp中按下按钮后如何在java中运行main方法?
- php - 创建按钮过滤器 wordpress 自定义主题
- google-chrome - 在 Puppeteer 中如何在控制台中捕获 Chrome 浏览器日志
- android - Android 10 (api 29) 中没有这样的文件或目录