c++ - MSVC 不允许重载 -> 运算符,它返回指向标量类型别名的指针
问题描述
#include <new>
typedef int T;
struct PtrWrapper {
T* ptr;
PtrWrapper() : ptr(new T) {}
T* operator-> () {
return ptr;
}
};
void foo() {
PtrWrapper wrapper;
//The commented line works
//wrapper.operator->()->~T();
wrapper->~T(); // This line does not work.
}
这在 clang 8.0.0 和 gcc 9.2 上编译没有任何错误,但在 msvc v19.22 上没有,编译器抱怨:
<source>(18): error C2839: invalid return type 'T *' for overloaded 'operator ->'
<source>(18): error C2300: 'PtrWrapper': class does not have a destructor called '~T'
但是,如果我wrapper.operator->()->~T()
改为编写,它会在所有三个编译器上编译。
这是 MSVC 的错误吗?
(有关更多详细信息,请参阅https://godbolt.org/z/tLx8-7)
解决方案
推荐阅读
- python - `pandas` 中的类日期时间索引
- typescript - Typescript 中的纱线运行流程相当于什么?
- laravel - LARAVEL - 更新
- javascript - 在 htmlunit 中设置 Javascript 超时的问题
- pandas - 尝试绘制 DataFrame 时缓冲区的维数错误
- pyspark-dataframes - 在pyspark中将字符串转换为日期
- python - 提取单词直到某个符号
- prolog - Prolog 中的大于和小于值
- ssl - open.connection(x, "rb") 中的错误:schannel:接收握手失败,SSL/TLS 连接失败 [R studio]
- python - 为什么我的代码不适用于循环和 if 条件?