https://issues.apache.org/jira/browse/AMQCPP-527

work around bad Microsoft STL Map impls.  
diff --git a/activemq-cpp/src/main/decaf/util/concurrent/ConcurrentStlMap.h b/activemq-cpp/src/main/decaf/util/concurrent/ConcurrentStlMap.h
index 087c069..05fdd91 100644
--- a/activemq-cpp/src/main/decaf/util/concurrent/ConcurrentStlMap.h
+++ b/activemq-cpp/src/main/decaf/util/concurrent/ConcurrentStlMap.h
@@ -774,8 +774,10 @@
             typename std::map<K, V, COMPARATOR>::const_iterator iter;
 
             synchronized(&mutex) {
-                iter = valueMap.find(key);
-                return iter != valueMap.end();
+                if (!valueMap.empty()) {
+                    iter = valueMap.find(key);
+                    return iter != valueMap.end();
+                }
             }
 
             return false;
@@ -829,9 +831,11 @@
         virtual V& get(const K& key) {
             typename std::map<K,V,COMPARATOR>::iterator iter;
             synchronized(&mutex) {
-                iter = valueMap.find(key);
-                if (iter != valueMap.end()) {
-                    return iter->second;
+                if (!valueMap.empty()) {
+                    iter = valueMap.find(key);
+                    if (iter != valueMap.end()) {
+                        return iter->second;
+                    }
                 }
             }
 
@@ -845,9 +849,11 @@
         virtual const V& get(const K& key) const {
             typename std::map<K,V,COMPARATOR>::const_iterator iter;
             synchronized(&mutex) {
-                iter = valueMap.find(key);
-                if (iter != valueMap.end()) {
-                    return iter->second;
+                if (!valueMap.empty()) {
+                    iter = valueMap.find(key);
+                    if (iter != valueMap.end()) {
+                        return iter->second;
+                    }
                 }
             }
 
@@ -916,13 +922,15 @@
         virtual V remove(const K& key) {
             V result = V();
             synchronized(&mutex) {
-                typename std::map<K, V, COMPARATOR>::iterator iter = valueMap.find(key);
-                if (iter == valueMap.end()) {
-                    return result;
+                if (!valueMap.empty()) {
+                    typename std::map<K, V, COMPARATOR>::iterator iter = valueMap.find(key);
+                    if (iter == valueMap.end()) {
+                        return result;
+                    }
+                    result = iter->second;
+                    valueMap.erase(iter);
+                    modCount++;
                 }
-                result = iter->second;
-                valueMap.erase(iter);
-                modCount++;
             }
 
             return result;