下面的代码没有编译:
#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...有人能解释一下为什么这不能编译吗?
这无法编译,因为js std::variant::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]是替换位置的变量的索引或类型。这些重载都不会以使其成为可还原的…的方式使用该参数。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。