下面的代码无法编译:
#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; } );
}
编译显示模板参数推导/替换失败
。
谁能解释一下为什么编译失败?
最佳答案
编译失败,因为 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 的替代变体的索引或类型。这些重载都没有以可推导的方式使用此参数......
关于c++ - 具有不同返回类型的函数变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59401666/