https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92986

            Bug ID: 92986
           Summary: ODR violation not detected
           Product: gcc
           Version: 5.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: geeteshmore at gmail dot com
  Target Milestone: ---

Hi,

I've a testcase where a class with same name is called in multiple files.
However, depending on the order of compile, output is different.

Compiler is unable to detect the One Defination Rule Violation here.

Testcase:

++++++++++++++++++File2.cpp++++++++++++++++++++++++
//file2.cpp

#include <iostream>
using namespace std; 

class Radiator
{
    public:
    string fileName()
    {   
        return "File2.cpp";
    }   
};

void print()
{
    Radiator rad;
    cout<<" Calling Class Radiator from File: " << rad.fileName() << endl;
}
++++++++++++++++++++++++++++main.cpp++++++++++++++

// The main module

#include <iostream>
using namespace std; 

class Radiator
{
    public:
    string fileName()
    {   
        return "Main.cpp";
    }   
};

void main_print()
{
    Radiator rad;
    cout<<" Calling Class Radiator from File: " << rad.fileName() << endl;
}

int main()
{
    main_print();
    return 0;
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++

Now when i compile :
g++ -std=c++0x -g file2.cpp main.cpp
 I get following Output, which is not what I expected:
Calling Class Radiator from File: File2.cpp

But when i compile :
g++ -std=c++0x -g main.cpp file2.cpp
 I get following correct Outputd:
Calling Class Radiator from File: Main.cpp

I tried using "-Wodr" but still i got no warnings.

Reply via email to