From 85411cebd80ad297ce371ff4bf1cf80d75c0e6e5 Mon Sep 17 00:00:00 2001 From: "Stephen D. Huston" Date: Fri, 24 Oct 2008 21:37:57 +0000 Subject: Fix Address wrapper to compile on MS VC8; discussed with Alan Conway git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@707754 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/Address.h | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'cpp/src/qpid/Address.h') diff --git a/cpp/src/qpid/Address.h b/cpp/src/qpid/Address.h index 2c4c16993d..cef80666b8 100755 --- a/cpp/src/qpid/Address.h +++ b/cpp/src/qpid/Address.h @@ -22,6 +22,7 @@ #include "qpid/sys/IntegerTypes.h" #include +#include #include #include @@ -41,13 +42,29 @@ inline bool operator==(const TcpAddress& x, const TcpAddress& y) { return y.host==x.host && y.port == x.port; } -/** Address is a variant of all address types, more coming in future. */ -struct Address : public boost::variant { - template Address(const T& t) : boost::variant(t) {} - template T* get() { return boost::get(this); } - template const T* get() const { return boost::get(this); } +std::ostream& operator<<(std::ostream& os, const TcpAddress& a); + +/** + * Address is a variant of all address types, more coming in future. + * + * Address wraps a boost::variant rather than be defined in terms of + * boost::variant to prevent users from having to deal directly with + * boost. + */ +struct Address { +public: + Address(const Address& a) : value(a.value) {} + template Address(const T& t) : value(t) {} + template Address& operator=(const T& t) { value=t; return *this; } + template T* get() { return boost::get(&value); } + template const T* get() const { return boost::get(&value); } + +private: + boost::variant value; }; +std::ostream& operator<<(std::ostream& os, const Address& addr); + } // namespace qpid #endif /*!QPID_ADDRESS_H*/ -- cgit v1.2.1