This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/39513] New: class defined in file scope got linked by other files
- From: "jengliang at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 20 Mar 2009 20:42:08 -0000
- Subject: [Bug c++/39513] New: class defined in file scope got linked by other files
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
This happens when one class is defined in header file, the other defined in cpp
file, have the same name. The program behavior becomes gcc argument order
dependent. At any rate, class A defined in foo.cpp has file scope shouldn't be
seen in bar.cpp.
$ g++ main.cpp foo.cpp bar.cpp
$ ./a.out
foo.cpp: A::A()
foo.cpp: A::~A()
foo.cpp: A::A()
foo.cpp: A::~A()
$ g++ main.cpp bar.cpp foo.cpp
$ ./a.out
bar.h: A::A()
bar.h: A::~A()
bar.h: A::A()
bar.h: A::~A()
-- main.cpp --
#include <iostream>
#include "foo.h"
#include "bar.h"
int main()
{
foo f;
bar b;
return 1;
}
-- foo.h --
class foo {
public:
foo();
};
-- foo.cpp --
#include "foo.h"
#include <iostream>
class A {
public:
A() { std::cout << "foo.cpp: A::A()" << std::endl; }
~A() { std::cout << "foo.cpp: A::~A()" << std::endl; }
};
foo::foo()
{
A * a = new A();
delete a;
}
-- bar.h --
#include <iostream>
class A {
public:
A() { std::cout << "bar.h: A::A()" << std::endl; }
~A() { std::cout << "bar.h: A::~A()" << std::endl; }
};
class bar {
public:
bar();
};
-- bar.cpp --
#include "bar.h"
#include <iostream>
bar::bar()
{
A *a = new A();
delete a;
}
--
Summary: class defined in file scope got linked by other files
Product: gcc
Version: 4.2.4
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: jengliang at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39513