[dbus-c++] DBus-C++ operator overloading should rely on ADL
DBus-C++ operator overloading (operator >>/<<) should rely on
argument-dependent lookup, rather than on sticking the overloads in the
global namespace, so that they can always be found correctly when used in
templates.
See http://clang.llvm.org/compatibility.html#dep_lookup to understand why the
existing behaviour was incorrect
BUG=none
TEST=Compile against types.h with Clang
Change-Id: I9239e960f6872f0f312561050d1bbd4cc9b87458
Reviewed-on: https://gerrit.chromium.org/gerrit/42027
Tested-by: Liam McLoughlin <lmcloughlin@chromium.org>
Commit-Queue: Ryan Sleevi <rsleevi@chromium.org>
Reviewed-by: Ryan Sleevi <rsleevi@chromium.org>
diff --git a/include/dbus-c++/types.h b/include/dbus-c++/types.h
index 72606f6..fb73ce5 100644
--- a/include/dbus-c++/types.h
+++ b/include/dbus-c++/types.h
@@ -191,8 +191,6 @@
}
};
-} /* namespace DBus */
-
extern DXXAPI DBus::MessageIter &operator << (DBus::MessageIter &iter, const DBus::Variant &val);
inline DBus::MessageIter &operator << (DBus::MessageIter &iter, const DBus::Invalid &)
@@ -526,5 +524,6 @@
return cast;
}
-
+} /* namespace DBus */
+
#endif//__DBUSXX_TYPES_H
diff --git a/src/types.cpp b/src/types.cpp
index 9d61d44..9ccc000 100644
--- a/src/types.cpp
+++ b/src/types.cpp
@@ -34,7 +34,7 @@
#include "message_p.h"
#include "internalerror.h"
-using namespace DBus;
+namespace DBus {
Variant::Variant()
: _msg(CallMessage()) // dummy message used as temporary storage for variant data
@@ -103,3 +103,5 @@
return ++iter;
}
+
+} /* namespace DBus */
diff --git a/tools/xml.cpp b/tools/xml.cpp
index 68ae5a6..d85bfd8 100644
--- a/tools/xml.cpp
+++ b/tools/xml.cpp
@@ -28,6 +28,10 @@
#include <expat.h>
+namespace DBus {
+
+namespace Xml {
+
std::istream &operator >> (std::istream &in, DBus::Xml::Document &doc)
{
std::stringbuf xmlbuf;
@@ -42,9 +46,6 @@
return out << doc.to_xml();
}
-using namespace DBus;
-using namespace DBus::Xml;
-
Error::Error(const char *error, int line, int column)
{
std::ostringstream estream;
@@ -313,3 +314,6 @@
doc->_depth--;
}
+} /* namespace Xml */
+
+} /* namespace DBus */
diff --git a/tools/xml.h b/tools/xml.h
index 6a8e69c..00e9041 100644
--- a/tools/xml.h
+++ b/tools/xml.h
@@ -132,11 +132,11 @@
int _depth;
};
+std::istream &operator >> (std::istream &, DBus::Xml::Document &);
+std::ostream &operator << (std::ostream &, DBus::Xml::Document &);
+
} /* namespace Xml */
} /* namespace DBus */
-std::istream &operator >> (std::istream &, DBus::Xml::Document &);
-std::ostream &operator << (std::ostream &, DBus::Xml::Document &);
-
#endif//__DBUSXX_XML_H