在不同的TU中定义相同的类

时间:2014-12-10 06:29:37

标签: c++ gcc

我有一个程序链接两个不同的TU如下:

的main.cpp

int a = 6;

struct A
{
    int b = a;
};

int main(){ }

slave.cpp

static int a = 42;

struct A
{
    int b = a;
};

我希望链接器在这种情况下会抛出错误,因为N3797::3.2/6 [basic.def.odr]):

  

类类型[...]

可以有多个定义      

鉴于这样一个名为D的实体在多个翻译中定义   单位,然后

     

[...]

     

- 在D的每个定义中,相应的名称,   根据3.4查找,应指在其中定义的实体   D的定义,或在超载后应指同一实体   分辨率(13.3)和部分模板匹配后   专业化(14.8.3),但名称可以引用a   非易失性const对象,如果是对象,则内部或无链接   在D的所有定义中具有相同的文字类型,对象是   用常量表达式(5.19)初始化,而对象不是   odr-used,并且对象在D的所有定义中具有相同的值;

     

[...]

所以在我的情况下a指的是不同TU中的不同实体,因此它不应该正确链接。但就我而言,确实如此。我正在gcc -o bin main.o slave.o使用gcc 4.7.2-2ubuntu1。这是一个错误吗?

0 个答案:

没有答案