在MSVC 15.8.5中,在调试模式下,我得到了
运行时检查失败#2 -变量'insert_into‘周围的堆栈已损坏。
MSVC中有错误吗?还是我做了什么坏事?
在clang版本6.0.0-1 ubuntu2和clang版本7.0.0- fine 341916-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;
}发布于 2018-10-22 11:52:34
因此,这是编译器中的一个缺陷。
https://stackoverflow.com/questions/52833810
复制相似问题