提问人:Nicolas 提问时间:11/25/2020 最后编辑:Nicolas 更新时间:11/25/2020 访问量:181
为什么我的 std::variant 的访问者存在堆栈损坏
Why is there stack corruption with my visitor for my std::variant
问:
我很难理解这段代码发生了什么:
#include <iostream>
#include <variant>
template <class... Ts>
struct overloaded : Ts... {
using Ts::operator()...;
};
template <class... Ts>
overloaded(Ts...) -> overloaded<Ts...>;
struct FirstPSet {
std::uint16_t uid;
};
struct SecondPSet {
std::uint16_t uid;
};
using PSet = std::variant<std::monostate, FirstPSet, SecondPSet>;
auto getUID(const PSet& pSet) {
auto visitor = overloaded{[](const std::monostate&) -> std::uint16_t { return 0; },
[](const auto& pSet) -> std::uint16_t { return pSet.uid; }};
return std::visit(visitor, pSet);
}
int main() {
FirstPSet pSet{42};
std::cout << getUID(pSet) << '\n';
}
使用 Visual Studio Community 16.8.2(调试版本)编译时,我在 .
如果我修改为 ,它可以正常工作。getUID
visitor
auto&& visitor = ...
答: 暂无答案
评论
visitor
std::monostate
tuple