<unordered_set>中的错误?

时间:2015-08-27 21:23:41

标签: c++ libstdc++ c++-standard-library g++4.8

我正在构建一个仅包含头的库(有充分理由;不要讨厌),它包含一个类和类成员函数的实现。这样做我在<unordered_set>遇到了一个非常奇怪的错误。搜索GCC的Bugzilla似乎没有发现任何似乎解决这个问题。

我破坏(严重)的代码在我的命名空间中包含了包含。

namespace probability {

#include <string>
#include <unordered_set>  // only this include breaks
#include <unordered_map>  

class ProbabilityTools
{
...

偶然的机会,我将#includes移到了类命名空间之外,并用<unordered_set>修复了问题。当放置在命名空间内时,其他任何包都没有导致此问题,只有<unordered_set>

#include <string>
#include <unordered_set>   // works when outside the namespace
#include <unordered_map>

namespace probability {

class ProbabilityTools
{
...

我正在使用GCC g ++ 4.8和-std = c ++ 11构建此代码,该代码在第二种配置中工作,并且在<unordered_map>两种配置中都可以使用。

这可能是一个libstdc ++ bug吗? GCC错误?

1 个答案:

答案 0 :(得分:10)

您不应在命名空间中放置标准#include指令。请参阅C ++ 14 [using.headers] / 3(这是关于标准库的标题):

  

翻译单位应仅在任何外部声明或定义之外包含标题,并且在首次引用其在该翻译单元中声明或首先定义的任何实体之前,应在词汇上包括标题。

相关问题