c++ - 变量 '...' 周围的堆栈已损坏

标签 c++ visual-c++ c++17

在 Debug模式下的 MSVC 15.8.5 上,我明白了

Run-Time Check Failure #2 - Stack around the variable 'insert_into' was corrupted.

是 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 bug所以这是编译器的一个缺陷。

关于c++ - 变量 '...' 周围的堆栈已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52833810/

相关文章:

c++ - 更改 Google glog 中的日志记录目录

c# - 从我的 c++ 应用程序调用 c# dll(解析 XML 文件)以将数组/列表返回给 c++

c++17倍表达式打印函数,可高效支持20000元素

c++ - 内联变量的多次销毁

C++ 和 printf - 奇怪的字符输出

c++ - 调试和 Release模式下的不同结果

debugging - abi "x86-windows-msvc2015-pe-64bit"的启动调试器 cdbengine 在 qtcreator 中挂起

c++ - 如何在lambda中访问捕获的此指针的 `typeid`?

c++ - 使用参数 vector 并行调用元素 vector 的成员函数

c++ - 如何删除通用容器中的列表?