c++ - 为什么 clang 处理这个琐碎的 std::variant 代码的异常?
问题描述
如果我们有这样的代码:
#include <variant>
int main(){
using V = std::variant<int, double>;
V a = 5;
V b = 5.6;
a.swap(b);
}
https://gcc.godbolt.org/z/oqGiHs
如果您使用 clang 编译,它会在swap
.
这是为什么?两种变体都是非空的,并且底层类型是异常安全的。
更新:
具有讽刺意味的是,这无一例外地编译:
#include <variant>
template<class T>
void sw(T &a, T &b){
auto c = a;
a = b;
b = c;
}
int main(){
using V = std::variant<int, double>;
V a = 5;
V b = 5.6;
sw(a, b);
}
解决方案
推荐阅读
- java - 如何在静态 html 网页上使用 java 显示 selenium webdriver 的输出?
- c# - webapi2绑定不起作用
- python - 计算 Django 中 __in 或 __contains 查找的匹配数
- ruby-on-rails - 如何让普通用户成为 Hyrax 应用程序中的管理员用户?
- python - 如何使用通配符获取路径名字符串并使用 pathlib 解析 glob?
- terminal - setuid 标志不会更改有效的用户 ID
- python - PyQt4 QtGui.QIcon() 不显示(Linux)
- gulp - Gulp 任务不会产生任何东西
- python - Python-pandas 按 groupby 计数不准确
- sql - FF6 格式的时间戳。需要 Hive UDF 或 RegExp