0

我在编译 boost.bimap 库时遇到问题。我的测试程序是一个空白的主要功能,只有一个包含指令(如#include <boost/bimap.hpp>)。经过一番调查,我发现预处理器从头文件中做了一些有趣的构造,例如:

struct A { struct B{}; struct B; };

我不知道这是否正确,但 gcc 接受它,而 clang 和 icc 不接受。谁是对的,我该怎么做才能用 bimap 库编译程序?不幸的是,在这种情况下我不能使用 gcc。

4

1 回答 1

10

struct B{};定义了一个嵌套类,然后struct B;是对同一个嵌套类的重新声明。

GCC 接受代码是错误的(错误报告),因为标准在 [class.mem] 中说:

一个成员不得在member-specification中声明两次,除非可以声明嵌套类或成员类模板,然后再定义,

在您的情况下,嵌套类被定义然后声明,这是不允许的,因此 Clang 和 ICC 是正确的给出诊断。但是,当我对其进行测试时,它们只会给出警告,而不是错误,所以也许你正在使用-Werror,在这种情况下停止这样做并且代码应该编译。

Boost.Bimap 代码中的问题是一个已知错误

于 2015-09-22T09:57:45.687 回答