MinGW GCC编译ustl库出现ioctl重载函数调用歧义错误如何解决
MinGW编译ustl库ioctl重载歧义问题解决
问题场景
在Windows 10系统使用10.3.0版本MinGW GCC编译ustl C++库时,解决了fstream.h第41行编译问题后,第43行仍抛出重载歧义错误。
原始代码片段
// int ioctl (const char* rname, int request, long argument = 0); // 原始代码 int ioctl (const char* rname, int request, long argument = 0u); inline int ioctl (const char* rname, int request, int argument) { return fstream::ioctl (rname, request, long(argument)); } inline int ioctl (const char* rname, int request, void* argument) { return fstream::ioctl (rname, request, intptr_t(argument)); }
报错信息
fstream.h:43:132: error: call of overloaded 'ioctl(const char*&, int&, uintptr_t)' is ambiguous 43 | inline int ioctl (const char* rname, int request, void* argument) { return fstream::ioctl (rname, request, uintptr_t(argument)); }
错误原因
MinGW环境下uintptr_t与long、int的类型匹配优先级一致,编译器无法判断uintptr_t类型的参数应该匹配哪个重载版本,因此抛出歧义错误。
修复方案
修改第43行的参数转换逻辑,将intptr_t强转替换为void*转long*后取值即可,修改后代码如下:
// ... intptr_t(argument)); // 原始代码 *((long*)(argument)));
修改后重新编译即可正常通过。
内容的提问来源于stack exchange,提问作者sailfish009
相关产品推荐
相关产品推荐

