summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/ConnectionFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/ConnectionFactory.cpp')
-rw-r--r--cpp/src/Ice/ConnectionFactory.cpp31
1 files changed, 29 insertions, 2 deletions
diff --git a/cpp/src/Ice/ConnectionFactory.cpp b/cpp/src/Ice/ConnectionFactory.cpp
index 43652e08478..bbebcbd19b0 100644
--- a/cpp/src/Ice/ConnectionFactory.cpp
+++ b/cpp/src/Ice/ConnectionFactory.cpp
@@ -393,9 +393,24 @@ IceInternal::OutgoingConnectionFactory::findConnection(const vector<EndpointIPtr
DefaultsAndOverridesPtr defaultsAndOverrides = _instance->defaultsAndOverrides();
assert(!endpoints.empty());
+#ifdef ICE_CPP11_MAPPING
+ //
+ // COMPILERFIX: G++ 4.8 fails to deduce the type of the lambda callback if passed
+ // directly to find.
+ //
+ std::function<bool (const ConnectionIPtr&)> cb = [](const ConnectionIPtr& conn)
+ {
+ return conn->isActiveOrHolding();
+ };
+#endif
for(vector<EndpointIPtr>::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p)
{
- ConnectionIPtr connection = find(_connectionsByEndpoint, *p, Ice::constMemFun(&ConnectionI::isActiveOrHolding));
+ ConnectionIPtr connection = find(_connectionsByEndpoint, *p,
+#ifdef ICE_CPP11_MAPPING
+ cb);
+#else
+ Ice::constMemFun(&ConnectionI::isActiveOrHolding));
+#endif
if(connection)
{
if(defaultsAndOverrides->overrideCompress)
@@ -425,7 +440,19 @@ IceInternal::OutgoingConnectionFactory::findConnection(const vector<ConnectorInf
continue;
}
- ConnectionIPtr connection = find(_connections, p->connector, Ice::constMemFun(&ConnectionI::isActiveOrHolding));
+#ifdef ICE_CPP11_MAPPING
+ std::function<bool (const ConnectionIPtr&)> cb = [](const ConnectionIPtr& conn)
+ {
+ return conn->isActiveOrHolding();
+ };
+#endif
+
+ ConnectionIPtr connection = find(_connections, p->connector,
+#ifdef ICE_CPP11_MAPPING
+ cb);
+#else
+ Ice::constMemFun(&ConnectionI::isActiveOrHolding));
+#endif
if(connection)
{
if(defaultsAndOverrides->overrideCompress)