Nic*_*las 7 c++ stack visual-studio visual-c++ c++17
我很难理解这段代码发生了什么:
#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';
}
Run Code Online (Sandbox Code Playgroud)
当使用 Visual Studio Community 16.8.2(调试版本)编译时,我在getUID. 如果我修改visitor为auto&& visitor = ...,它工作正常。
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |