Hi all,
the following code fails with gcc 4.4.3,4.5.0 and 4.6 snapshot (some weeks old)
:
<snip>
#include <iostream>
using namespace std;
class A
{
public:
static const int x=10;
};
class Zgr_A
{
public:
A* operator->() { return (A*)0; }
};
template <class T>
class Zgr
{
public:
T* operator->() { return (T*)0; }
};
int main()
{
A a_direct;
A* a_ptr;
Zgr_A a_indirect_ptr;
Zgr<A> a_template_ptr;
A* ptr_from_indirect= a_indirect_ptr.operator->();
cout << "0. " << A::x << endl;
cout << "1. " << a_direct.x << endl;
cout << "2. " << a_ptr->x << endl;
cout << "3. " << a_indirect_ptr->x << endl;
cout << "4. " << a_template_ptr->x << endl;
cout << "5. " << ptr_from_indirect->x << endl;
cout << "6. " << a_template_ptr.operator->()->x << endl;
cout << "7. " << ((A*)(a_template_ptr.operator->()))->x << endl;
return 0;
}
</snap>
Result:
g++ -g main.cpp -o go
/tmp/ccABoZtk.o: In function `main':
main.cpp:37: undefined reference to `A::x'
main.cpp:38: undefined reference to `A::x'
main.cpp:40: undefined reference to `A::x'
main.cpp:41: undefined reference to `A::x'
collect2: ld returned 1 exit status
Is my code wrong or is it a compiler bug? If the code is wrong, I expect a
compiler error not a linker message!
Wondering...
Klaus
P.S. Borland C++ compiles and links correct.
--
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de