diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc
index 90f3854a72c746e26742218ac603b93f6d38798c..a70b555855210e88a52d0fdfddb9e0c5ac2bfdec 100644
--- a/src/cpp/server/server.cc
+++ b/src/cpp/server/server.cc
@@ -240,8 +240,7 @@ bool Server::RegisterService(const grpc::string *host, RpcService* service) {
               method->name());
       return false;
     }
-    SyncRequest request(method, tag);
-    sync_methods_->emplace_back(request);
+    sync_methods_->emplace_back(method, tag);
   }
   return true;
 }
@@ -286,7 +285,10 @@ bool Server::Start() {
   if (!has_generic_service_) {
     unknown_method_.reset(new RpcServiceMethod(
         "unknown", RpcMethod::BIDI_STREAMING, new UnknownMethodHandler));
-    sync_methods_->emplace_back(unknown_method_.get(), nullptr);
+    // Use of emplace_back with just constructor arguments is not accepted here
+    // by gcc-4.4 because it can't match the anonymous nullptr with a proper
+    // constructor implicitly. Construct the object and use push_back.
+    sync_methods_->push_back(SyncRequest(unknown_method_.get(), nullptr));
   }
   // Start processing rpcs.
   if (!sync_methods_->empty()) {