KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
With this sample program I observe a different behavior in g++ and clang Foo.h: #include <iostream> namespace Bar { class Foo { public: Foo(int x) : _x(x) {} int x() const { return _x; } private: int _x; }; } std::ostream& operator <<(std::ostream& os, const Bar::Foo* foo); Foo.cpp #include <Foo.h> using namespace std; ostream& operator <<(ostream& os, const Bar::Foo* foo) { return os << foo->x(); } main.cpp #include <iostream> using namespace std; template<typename T> void print(const T& t) { cout << t << endl; } #include <Foo.h> int main(int argc, char** argv) { Bar::Foo* foo = new Bar::Foo(5); print(foo); } Compiling with clang++ and g++ produce different results: air:~ jose$ clang++ Foo.cpp main.cpp -I. air:~ jose$ ./a.out 0x7ff9e84000e0 air:~ jose$ g++ Foo.cpp main.cpp -I. air:~ jose$ ./a.out 5 Which one is correct and why?.
Tags (comma-separated)
Save Edits
Cancel