在内部命名空间

时间:2016-10-01 11:46:55

标签: c++

我是libzip++包装器的所有者,这是C libzip库周围的基本标题。

我声明了一个libzip命名空间,它主要包装C函数并重命名类型以删除zip_前缀。

C库定义了一个名为struct zip_stat的结构。我尝试在libzip命名空间中声明一个typedef,如下所示:

namespace libzip {

using Stat = struct zip_stat;

}

在GCC和clang上,没有问题,我可以使用libzip :: Stat作为struct zip_stat的别名。在Visual Studio上,我收到一条错误消息,说我尝试使用未定义的libzip :: zip_stat结构,可能是因为此别名定义尝试解析为libzip :: zip_stat结构。

在Visual Studio上,此声明正在运行,但不适用于gcc(表示这不会声明任何内容)

namespace libzip {

using Stat = struct ::zip_stat;

}

哪种编译器具有正确的行为?我应该使用什么声明?

编辑:我发现还有一个zip_stat函数可能与结构冲突。

0 个答案:

没有答案