}
         break;
       default:
-        throw "compiler error: no const of base type " + tbase;
+      {
+        std::stringstream ss;
+        ss << "compiler error: no const of base type " << tbase;
+        throw ss.str();
+      }
     }
   } else if (type->is_enum()) {
     render << type->get_name() << "." << value->get_identifier_name();
           out << "ReadDouble();";
           break;
         default:
-          throw "compiler error: no C# name for base type " + tbase;
+        {
+          std::stringstream ss;
+          ss << "compiler error: no C# name for base type " << tbase;
+          throw ss.str();
+        }
       }
     } else if (type->is_enum()) {
       out << "ReadI32();";
           out << "WriteDouble(" << nullable_name << ");";
           break;
         default:
-          throw "compiler error: no C# name for base type " + tbase;
+        {
+          std::stringstream ss;
+          ss << "compiler error: no C# name for base type " << tbase;
+          throw ss.str();
+        }
       }
     } else if (type->is_enum()) {
       out << "WriteI32((int)" << nullable_name << ");";
     case t_base_type::TYPE_DOUBLE:
       return "double" + postfix;
     default:
-      throw "compiler error: no C# name for base type " + tbase->get_base();
+    {
+      std::stringstream ss;
+      ss << "compiler error: no C# name for base type " << tbase->get_base();
+      throw ss.str();
+    }
   }
 }