diff --git a/src/signal/signal-cast-helper.cpp b/src/signal/signal-cast-helper.cpp
index 73c0e5735fd42f14908a8d6758716965b6f0cdbc..360f4423962c8bce020d43ead047e2789d5d43b9 100644
--- a/src/signal/signal-cast-helper.cpp
+++ b/src/signal/signal-cast-helper.cpp
@@ -52,6 +52,15 @@ inline boost::any DefaultCastRegisterer<double>::cast(std::istringstream &iss) {
   }
 }
 
+// for std::string, do not check failure. If input stream contains an
+// empty string, iss.fail() returns true and an exception is thrown
+template <>
+inline boost::any
+DefaultCastRegisterer<std::string>::cast(std::istringstream &iss) {
+  std::string inst(iss.str());
+  return inst;
+}
+
 // for std::string, do not add std::endl at the end of the stream.
 template <>
 inline void DefaultCastRegisterer<std::string>::disp(const boost::any &object,