MSVC对这段代码很满意,但GCC并不那么热衷
MSVC is happy with this code but GCC isn't so keen
这段代码在MSVC(19.00.23918(中编译,但GCC不喜欢它,除非我在调用Detach_Internal((时使用这个>成员运算符的访问。
GCC 是否在这里捕获了 MSVC 没有的潜在错误? 作为一般规则,在引用基类中的函数时,始终使用this->是否更好?
注意 GCC 将使用-permissive编译它。
#include <memory>
namespace Events
{
template<typename T>
class EventBase
{
protected:
void Detach_Internal(std::weak_ptr<void> const & p)
{
}
};
template<typename T>
class Event : public EventBase<T>
{
public:
void Detach(std::weak_ptr<void> const & p)
{
Detach_Internal(p);
}
};
}
int main(void)
{
auto event = std::make_unique<Events::Event<void()>>();
}
33:30:错误:没有依赖于模板参数的"Detach_Internal"参数,因此必须提供"Detach_Internal"声明 [-fallowive]
GCC 是否在这里捕获了 VS 没有的潜在错误?作为一般规则,在基类中引用函数时始终使用 this-> 是否更好?
海湾合作委员会是正确的。在依赖基类中引用名称时,应添加this->
(即EventBase<T>
,这取决于模板参数T
(。
否则,作为非依赖名称,Detach_Internal
将不会在依赖基类EventBase<T>
中查找。
要解决此问题,您可以使名称Detach_Internal
依赖的,然后在实例化时查找它,此时确切的基类模板专用化是固定的。
this->Detach_Internal(p);
EventBase<T>::Detach_Internal(p);
using EventBase<T>::Detach_Internal;
Detach_Internal(p);
相关文章:
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 奇怪的结构&GCC&clang(void*返回类型)
- GCC本机矩阵运算库
- PowerPC ppc64le上的Gcc Woverloaded虚拟错误
- gcc和c++17的过载解析失败
- 数据成员SFINAE的C++17测试:gcc vs clang
- GCC对可能有效的代码抛出init list生存期警告
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 使用gcc从静态链接的文件中查找可选符号
- 普通环路未使用gcc 4.8.5自动矢量化
- 有了gcc,是否可以链接库,但前提是它存在
- 在clang++预处理器中确定gcc工具链版本
- 为什么 gcc 编译这个而 msvc 没有
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何使用Clang/GCC在Mac上为C/C++设置VSCode
- MSVC对这段代码很满意,但GCC并不那么热衷