具有不同 return 类型的函数变体
variant of functions with different return types
以下代码无法编译:
#include <functional>
#include <variant>
int main() {
using ret_void = std::function<void()>;
using ret_int = std::function<int()>;
std::variant<ret_void, ret_int> var;
var.emplace([](){ return 1; } );
}
编译结果为 template argument deduction/substitution failed
。
谁能解释为什么编译失败?
编译失败,因为 std::variant::emplace
需要给出替代 emplace 的变体的类型或索引:
#include <functional>
#include <variant>
int main() {
using ret_void = std::function<void()>;
using ret_int = std::function<int()>;
std::variant<ret_void, ret_int> var;
var.emplace<ret_int>([](){ return 1; });
}
std::variant::emplace
[variant.mod] 的所有重载的第一个模板参数是索引或替代 emplace 的变体类型。 None 这些重载以使其可推导的方式使用此参数…
以下代码无法编译:
#include <functional>
#include <variant>
int main() {
using ret_void = std::function<void()>;
using ret_int = std::function<int()>;
std::variant<ret_void, ret_int> var;
var.emplace([](){ return 1; } );
}
编译结果为 template argument deduction/substitution failed
。
谁能解释为什么编译失败?
编译失败,因为 std::variant::emplace
需要给出替代 emplace 的变体的类型或索引:
#include <functional>
#include <variant>
int main() {
using ret_void = std::function<void()>;
using ret_int = std::function<int()>;
std::variant<ret_void, ret_int> var;
var.emplace<ret_int>([](){ return 1; });
}
std::variant::emplace
[variant.mod] 的所有重载的第一个模板参数是索引或替代 emplace 的变体类型。 None 这些重载以使其可推导的方式使用此参数…