【发布时间】:2020-07-13 03:10:47
【问题描述】:
我正在使用std::variant 和std::visit,使用如下所示的"overload" pattern:
#include <iostream>
#include <variant>
template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
int main(void) {
std::variant<int, float> var;
auto fs = overloaded {
[](int var) {std::cout << "var is int" << std::endl;},
[](float var) {std::cout << "var is float" << std::endl;}
};
var = 0;
std::visit(fs, var);
var = 0.0f;
std::visit(fs, var);
}
在 cppreference 上,an example 说:
// explicit deduction guide (not needed as of C++20)
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
为什么在 C++20 中不再需要这个推导指南?删除类型推导指南会导致 compile to fail on all current compilers,但现在没有人完全支持 C++20,所以这并不意味着什么。谁能指出我讨论这个的规范部分?
【问题讨论】:
标签: c++ language-lawyer c++20 type-deduction