+diff -ur ceph-0.94.10/src/client/SyntheticClient.cc ceph-0.94.10-cxx/src/client/SyntheticClient.cc
+--- ceph-0.94.10/src/client/SyntheticClient.cc 2017-02-21 16:13:19.000000000 +0100
++++ ceph-0.94.10-cxx/src/client/SyntheticClient.cc 2017-04-29 12:25:26.633497617 +0200
+@@ -601,7 +601,7 @@
+ int size = iargs.front(); iargs.pop_front();
+ int inflight = iargs.front(); iargs.pop_front();
+ if (run_me()) {
+- dout(2) << "createobjects " << cout << " of " << size << " bytes"
++ dout(2) << "createobjects " << cout.rdbuf() << " of " << size << " bytes"
+ << ", " << inflight << " in flight" << dendl;
+ create_objects(count, size, inflight);
+ }
+@@ -617,7 +617,7 @@
+ int rskew = iargs.front(); iargs.pop_front();
+ int wskew = iargs.front(); iargs.pop_front();
+ if (run_me()) {
+- dout(2) << "objectrw " << cout << " " << size << " " << wrpc
++ dout(2) << "objectrw " << cout.rdbuf() << " " << size << " " << wrpc
+ << " " << overlap << " " << rskew << " " << wskew << dendl;
+ object_rw(count, size, wrpc, overlap, rskew, wskew);
+ }
+diff -ur ceph-0.94.10/src/common/admin_socket.cc ceph-0.94.10-cxx/src/common/admin_socket.cc
+--- ceph-0.94.10/src/common/admin_socket.cc 2017-02-21 16:13:19.000000000 +0100
++++ ceph-0.94.10-cxx/src/common/admin_socket.cc 2017-04-29 09:57:25.062251956 +0200
+@@ -352,7 +352,7 @@
+ stringstream errss;
+ cmdvec.push_back(cmd);
+ if (!cmdmap_from_json(cmdvec, &cmdmap, errss)) {
+- ldout(m_cct, 0) << "AdminSocket: " << errss << dendl;
++ ldout(m_cct, 0) << "AdminSocket: " << errss.rdbuf() << dendl;
+ return false;
+ }
+ cmd_getval(m_cct, cmdmap, "format", format);
+diff -ur ceph-0.94.10/src/common/ceph_json.h ceph-0.94.10-cxx/src/common/ceph_json.h
+--- ceph-0.94.10/src/common/ceph_json.h 2017-02-21 16:13:19.000000000 +0100
++++ ceph-0.94.10-cxx/src/common/ceph_json.h 2017-04-29 11:13:38.925899980 +0200
+@@ -198,7 +198,7 @@
+ JSONObj *o = *iter;
+ JSONDecoder::decode_json("key", key, o);
+ JSONDecoder::decode_json("val", val, o);
+- m.insert(make_pair<K, V>(key, val));
++ m.insert(make_pair(key, val));
+ }
+ }
+
+diff -ur ceph-0.94.10/src/common/cmdparse.cc ceph-0.94.10-cxx/src/common/cmdparse.cc
+--- ceph-0.94.10/src/common/cmdparse.cc 2017-02-21 16:13:19.000000000 +0100
++++ ceph-0.94.10-cxx/src/common/cmdparse.cc 2017-04-29 09:58:13.362841243 +0200
+@@ -224,7 +224,7 @@
+ BackTrace bt(1);
+ ostringstream oss;
+ bt.print(oss);
+- lderr(cct) << oss << dendl;
++ lderr(cct) << oss.rdbuf() << dendl;
+ if (status == 0)
+ free((char *)typestr);
+ }
+diff -ur ceph-0.94.10/src/common/LogClient.h ceph-0.94.10-cxx/src/common/LogClient.h
+--- ceph-0.94.10/src/common/LogClient.h 2017-02-21 16:13:19.000000000 +0100
++++ ceph-0.94.10-cxx/src/common/LogClient.h 2017-04-29 09:55:08.930587122 +0200
+@@ -137,7 +137,7 @@
+ }
+ bool must_log_to_monitors() { return log_to_monitors; }
+
+- typedef shared_ptr<LogChannel> Ref;
++ typedef std::shared_ptr<LogChannel> Ref;
+
+ /**
+ * update config values from parsed k/v map for each config option
+diff -ur ceph-0.94.10/src/mds/CInode.cc ceph-0.94.10-cxx/src/mds/CInode.cc
+--- ceph-0.94.10/src/mds/CInode.cc 2017-02-21 16:13:19.000000000 +0100
++++ ceph-0.94.10-cxx/src/mds/CInode.cc 2017-04-29 10:44:49.563391124 +0200
+@@ -3791,7 +3791,7 @@
+ f->dump_int("read_ret_val", backtrace.ondisk_read_retval);
+ f->dump_stream("ondisk_value") << backtrace.ondisk_value;
+ f->dump_stream("memoryvalue") << backtrace.memory_value;
+- f->dump_stream("error_str") << backtrace.error_str;
++ f->dump_stream("error_str") << backtrace.error_str.rdbuf();
+ }
+ f->close_section(); // backtrace
+ f->open_object_section("raw_rstats");
+@@ -3801,7 +3801,7 @@
+ f->dump_int("read_ret_val", raw_rstats.ondisk_read_retval);
+ f->dump_stream("ondisk_value") << raw_rstats.ondisk_value;
+ f->dump_stream("memory_value") << raw_rstats.memory_value;
+- f->dump_stream("error_str") << raw_rstats.error_str;
++ f->dump_stream("error_str") << raw_rstats.error_str.rdbuf();
+ }
+ f->close_section(); // raw_rstats
+ // dump failure return code
+diff -ur ceph-0.94.10/src/mds/mdstypes.h ceph-0.94.10-cxx/src/mds/mdstypes.h
+--- ceph-0.94.10/src/mds/mdstypes.h 2017-02-21 16:13:19.000000000 +0100
++++ ceph-0.94.10-cxx/src/mds/mdstypes.h 2017-04-29 11:15:44.723963614 +0200
+@@ -71,7 +71,7 @@
+ #define MDS_TRAVERSE_DISCOVERXLOCK 3 // succeeds on (foreign?) null, xlocked dentries.
+
+
+-BOOST_STRONG_TYPEDEF(int32_t, mds_rank_t)
++typedef int32_t mds_rank_t;
+ BOOST_STRONG_TYPEDEF(uint64_t, mds_gid_t)
+ extern const mds_gid_t MDS_GID_NONE;
+ extern const mds_rank_t MDS_RANK_NONE;
+diff -ur ceph-0.94.10/src/mon/OSDMonitor.cc ceph-0.94.10-cxx/src/mon/OSDMonitor.cc
+--- ceph-0.94.10/src/mon/OSDMonitor.cc 2017-02-21 16:13:19.000000000 +0100
++++ ceph-0.94.10-cxx/src/mon/OSDMonitor.cc 2017-04-29 10:17:06.705748922 +0200
+@@ -4401,7 +4401,7 @@
+ if (err == 0) {
+ k = erasure_code->get_data_chunk_count();
+ } else {
+- ss << __func__ << " get_erasure_code failed: " << tmp;
++ ss << __func__ << " get_erasure_code failed: " << tmp.rdbuf();
+ return err;;
+ }
+
+diff -ur ceph-0.94.10/src/msg/simple/Pipe.cc ceph-0.94.10-cxx/src/msg/simple/Pipe.cc
+--- ceph-0.94.10/src/msg/simple/Pipe.cc 2017-02-21 16:13:19.000000000 +0100
++++ ceph-0.94.10-cxx/src/msg/simple/Pipe.cc 2017-04-29 10:05:09.937087135 +0200
+@@ -181,7 +181,7 @@
+
+ void Pipe::DelayedDelivery::discard()
+ {
+- lgeneric_subdout(pipe->msgr->cct, ms, 20) << pipe->_pipe_prefix(_dout) << "DelayedDelivery::discard" << dendl;
++ lgeneric_subdout(pipe->msgr->cct, ms, 20) << pipe->_pipe_prefix(_dout).rdbuf() << "DelayedDelivery::discard" << dendl;
+ Mutex::Locker l(delay_lock);
+ while (!delay_queue.empty()) {
+ Message *m = delay_queue.front().second;
+@@ -193,7 +193,7 @@
+
+ void Pipe::DelayedDelivery::flush()
+ {
+- lgeneric_subdout(pipe->msgr->cct, ms, 20) << pipe->_pipe_prefix(_dout) << "DelayedDelivery::flush" << dendl;
++ lgeneric_subdout(pipe->msgr->cct, ms, 20) << pipe->_pipe_prefix(_dout).rdbuf() << "DelayedDelivery::flush" << dendl;
+ Mutex::Locker l(delay_lock);
+ flush_count = delay_queue.size();
+ delay_cond.Signal();
+@@ -202,11 +202,11 @@
+ void *Pipe::DelayedDelivery::entry()
+ {
+ Mutex::Locker locker(delay_lock);
+- lgeneric_subdout(pipe->msgr->cct, ms, 20) << pipe->_pipe_prefix(_dout) << "DelayedDelivery::entry start" << dendl;
++ lgeneric_subdout(pipe->msgr->cct, ms, 20) << pipe->_pipe_prefix(_dout).rdbuf() << "DelayedDelivery::entry start" << dendl;
+
+ while (!stop_delayed_delivery) {
+ if (delay_queue.empty()) {
+- lgeneric_subdout(pipe->msgr->cct, ms, 30) << pipe->_pipe_prefix(_dout) << "DelayedDelivery::entry sleeping on delay_cond because delay queue is empty" << dendl;
++ lgeneric_subdout(pipe->msgr->cct, ms, 30) << pipe->_pipe_prefix(_dout).rdbuf() << "DelayedDelivery::entry sleeping on delay_cond because delay queue is empty" << dendl;
+ delay_cond.Wait(delay_lock);
+ continue;
+ }
+@@ -216,11 +216,11 @@
+ if (!flush_count &&
+ (release > ceph_clock_now(pipe->msgr->cct) &&
+ (delay_msg_type.empty() || m->get_type_name() == delay_msg_type))) {
+- lgeneric_subdout(pipe->msgr->cct, ms, 10) << pipe->_pipe_prefix(_dout) << "DelayedDelivery::entry sleeping on delay_cond until " << release << dendl;
++ lgeneric_subdout(pipe->msgr->cct, ms, 10) << pipe->_pipe_prefix(_dout).rdbuf() << "DelayedDelivery::entry sleeping on delay_cond until " << release << dendl;
+ delay_cond.WaitUntil(delay_lock, release);
+ continue;
+ }
+- lgeneric_subdout(pipe->msgr->cct, ms, 10) << pipe->_pipe_prefix(_dout) << "DelayedDelivery::entry dequeuing message " << m << " for delivery, past " << release << dendl;
++ lgeneric_subdout(pipe->msgr->cct, ms, 10) << pipe->_pipe_prefix(_dout).rdbuf() << "DelayedDelivery::entry dequeuing message " << m << " for delivery, past " << release << dendl;
+ delay_queue.pop_front();
+ if (flush_count > 0) {
+ --flush_count;
+@@ -245,7 +245,7 @@
+ }
+ active_flush = false;
+ }
+- lgeneric_subdout(pipe->msgr->cct, ms, 20) << pipe->_pipe_prefix(_dout) << "DelayedDelivery::entry stop" << dendl;
++ lgeneric_subdout(pipe->msgr->cct, ms, 20) << pipe->_pipe_prefix(_dout).rdbuf() << "DelayedDelivery::entry stop" << dendl;
+ return NULL;
+ }
+
+diff -ur ceph-0.94.10/src/osd/PG.cc ceph-0.94.10-cxx/src/osd/PG.cc
+--- ceph-0.94.10/src/osd/PG.cc 2017-02-21 16:13:19.000000000 +0100
++++ ceph-0.94.10-cxx/src/osd/PG.cc 2017-04-29 10:54:40.743267753 +0200
+@@ -3144,7 +3144,7 @@
+ info_struct_v < 8 ? OSD::make_pg_log_oid(pg_id) : pgmeta_oid,
+ info, oss);
+ if (oss.str().length())
+- osd->clog->error() << oss;
++ osd->clog->error() << oss.rdbuf();
+
+ // log any weirdness
+ log_weirdness();
+diff -ur ceph-0.94.10/src/rgw/rgw_cache.cc ceph-0.94.10-cxx/src/rgw/rgw_cache.cc
+--- ceph-0.94.10/src/rgw/rgw_cache.cc 2017-02-21 16:13:19.000000000 +0100
++++ ceph-0.94.10-cxx/src/rgw/rgw_cache.cc 2017-04-29 11:09:17.823000713 +0200
+@@ -105,7 +105,7 @@
+ for (liter = cache_entry_list.begin(); liter != cache_entry_list.end(); ++liter) {
+ ObjectCacheEntry *entry = *liter;
+
+- entry->chained_entries.push_back(make_pair<RGWChainedCache *, string>(chained_entry->cache, chained_entry->key));
++ entry->chained_entries.push_back(make_pair(chained_entry->cache, chained_entry->key));
+ }
+
+ return true;
+diff -ur ceph-0.94.10/src/test/librbd/test_ImageWatcher.cc ceph-0.94.10-cxx/src/test/librbd/test_ImageWatcher.cc
+--- ceph-0.94.10/src/test/librbd/test_ImageWatcher.cc 2017-02-21 16:13:19.000000000 +0100
++++ ceph-0.94.10-cxx/src/test/librbd/test_ImageWatcher.cc 2017-04-29 11:58:28.225636783 +0200
+@@ -383,8 +383,7 @@
+ ASSERT_EQ(0, open_image(m_image_name, &ictx));
+
+ ASSERT_EQ(0, register_image_watch(*ictx));
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_ACQUIRED_LOCK, bufferlist()));
++ m_notify_acks = {{NOTIFY_OP_ACQUIRED_LOCK, {}}};
+
+ {
+ RWLock::WLocker l(ictx->owner_lock);
+@@ -474,8 +473,7 @@
+ ASSERT_EQ(0, open_image(m_image_name, &ictx));
+
+ ASSERT_EQ(0, register_image_watch(*ictx));
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_ACQUIRED_LOCK, bufferlist()));
++ m_notify_acks = {{NOTIFY_OP_ACQUIRED_LOCK, {}}};
+
+ {
+ RWLock::WLocker l(ictx->owner_lock);
+@@ -528,8 +526,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_REQUEST_LOCK, create_response_message(0)));
++ m_notify_acks = {{NOTIFY_OP_REQUEST_LOCK, create_response_message(0)}};
+
+ {
+ RWLock::WLocker l(ictx->owner_lock);
+@@ -549,9 +546,7 @@
+ ASSERT_EQ(0, unlock_image());
+
+ m_notifies.clear();
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_RELEASED_LOCK, bufferlist()))(
+- std::make_pair(NOTIFY_OP_ACQUIRED_LOCK, bufferlist()));
++ m_notify_acks = {{NOTIFY_OP_RELEASED_LOCK, {}}, {NOTIFY_OP_ACQUIRED_LOCK, {}}};
+
+ bufferlist bl;
+ {
+@@ -578,8 +573,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_REQUEST_LOCK, bufferlist()));
++ m_notify_acks = {{NOTIFY_OP_REQUEST_LOCK, {}}};
+
+ m_expected_aio_restarts = 1;
+ {
+@@ -606,8 +600,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_REQUEST_LOCK, create_response_message(0)));
++ m_notify_acks = {{NOTIFY_OP_REQUEST_LOCK, create_response_message(0)}};
+
+ int orig_notify_timeout = ictx->cct->_conf->client_notify_timeout;
+ ictx->cct->_conf->set_val("client_notify_timeout", "0");
+@@ -645,8 +638,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_REQUEST_LOCK, create_response_message(0)));
++ m_notify_acks = {{NOTIFY_OP_REQUEST_LOCK, create_response_message(0)}};
+
+ m_expected_aio_restarts = 1;
+ {
+@@ -662,8 +654,7 @@
+ ASSERT_EQ(expected_notify_ops, m_notifies);
+
+ m_notifies.clear();
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_RELEASED_LOCK, bufferlist()));
++ m_notify_acks = {{NOTIFY_OP_RELEASED_LOCK, {}}};
+
+ bufferlist bl;
+ {
+@@ -703,8 +694,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_REQUEST_LOCK, create_response_message(0)));
++ m_notify_acks = {{NOTIFY_OP_REQUEST_LOCK, create_response_message(0)}};
+
+ m_expected_aio_restarts = 1;
+ {
+@@ -723,8 +713,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_SHARED, "manually 1234"));
+
+ m_notifies.clear();
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_RELEASED_LOCK, bufferlist()));
++ m_notify_acks = {{NOTIFY_OP_RELEASED_LOCK, {}}};
+
+ bufferlist bl;
+ {
+@@ -744,8 +733,7 @@
+
+ ASSERT_EQ(0, register_image_watch(*ictx));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_HEADER_UPDATE, bufferlist()));
++ m_notify_acks = {{NOTIFY_OP_HEADER_UPDATE, {}}};
+ librbd::ImageWatcher::notify_header_update(m_ioctx, ictx->header_oid);
+
+ ASSERT_TRUE(wait_for_notifies(*ictx));
+@@ -765,8 +753,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_FLATTEN, create_response_message(0)));
++ m_notify_acks = {{NOTIFY_OP_FLATTEN, create_response_message(0)}};
+
+ ProgressContext progress_context;
+ FlattenTask flatten_task(ictx, &progress_context);
+@@ -800,8 +787,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_RESIZE, create_response_message(0)));
++ m_notify_acks = {{NOTIFY_OP_RESIZE, create_response_message(0)}};
+
+ ProgressContext progress_context;
+ ResizeTask resize_task(ictx, &progress_context);
+@@ -835,8 +821,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_SNAP_CREATE, create_response_message(0)));
++ m_notify_acks = {{NOTIFY_OP_SNAP_CREATE, create_response_message(0)}};
+
+ RWLock::RLocker l(ictx->owner_lock);
+ ASSERT_EQ(0, ictx->image_watcher->notify_snap_create("snap"));
+@@ -856,8 +841,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_SNAP_CREATE, create_response_message(-EEXIST)));
++ m_notify_acks = {{NOTIFY_OP_SNAP_CREATE, create_response_message(-EEXIST)}};
+
+ RWLock::RLocker l(ictx->owner_lock);
+ ASSERT_EQ(-EEXIST, ictx->image_watcher->notify_snap_create("snap"));
+@@ -877,8 +861,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_FLATTEN, bufferlist()));
++ m_notify_acks = {{NOTIFY_OP_FLATTEN, {}}};
+
+ ProgressContext progress_context;
+ FlattenTask flatten_task(ictx, &progress_context);
+@@ -898,8 +881,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_FLATTEN, create_response_message(-EIO)));
++ m_notify_acks = {{NOTIFY_OP_FLATTEN, create_response_message(-EIO)}};
+
+ ProgressContext progress_context;
+ FlattenTask flatten_task(ictx, &progress_context);
+@@ -919,8 +901,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_FLATTEN, create_response_message(0)));
++ m_notify_acks = {{NOTIFY_OP_FLATTEN, create_response_message(0)}};
+
+ ProgressContext progress_context;
+ FlattenTask flatten_task(ictx, &progress_context);
+@@ -960,8 +941,7 @@
+ ASSERT_EQ(0, lock_image(*ictx, LOCK_EXCLUSIVE,
+ "auto " + stringify(m_watch_ctx->get_handle())));
+
+- m_notify_acks = boost::assign::list_of(
+- std::make_pair(NOTIFY_OP_FLATTEN, create_response_message(0)));
++ m_notify_acks = {{NOTIFY_OP_FLATTEN, create_response_message(0)}};
+
+ ProgressContext progress_context;
+ FlattenTask flatten_task(ictx, &progress_context);