Generate base type
diff --git a/compiler/cpp/src/thrift/generate/t_erl_generator.cc b/compiler/cpp/src/thrift/generate/t_erl_generator.cc
index f2c0a64..ac5f066 100644
--- a/compiler/cpp/src/thrift/generate/t_erl_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_erl_generator.cc
@@ -132,6 +132,8 @@
   std::string render_member_type(t_field* field);
   std::string render_member_value(t_field* field);
   std::string render_member_requiredness(t_field* field);
+
+  std::string render_base_type(t_type* type);
   std::string render_typedef_type(t_type* ttype);
   std::string render_string_type();
 
@@ -807,27 +809,12 @@
 }
 
 string t_erl_generator::render_member_type(t_field* field) {
-  t_type* type = get_true_type(field->get_type());
+  t_type* type = field->get_type();
   if (type->is_base_type()) {
-    t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
-    switch (tbase) {
-    case t_base_type::TYPE_STRING:
-      return render_string_type();
-    case t_base_type::TYPE_BOOL:
-      return "boolean()";
-    case t_base_type::TYPE_I8:
-    case t_base_type::TYPE_I16:
-    case t_base_type::TYPE_I32:
-    case t_base_type::TYPE_I64:
-      return "integer()";
-    case t_base_type::TYPE_DOUBLE:
-      return "float()";
-    default:
-      throw "compiler error: unsupported base type " + t_base_type::t_base_name(tbase);
-    }
+    return render_base_type(type);
   } else if (type->is_enum()) {
-    return "integer()";
-  } else if (type->is_struct() || type->is_xception()) {
+    return type_name(type) + "()";
+  } else if (type->is_struct() || type->is_typedef()) {
     return type_name(type) + "()";
   } else if (type->is_map()) {
     if (maps_) {
@@ -844,6 +831,25 @@
   }
 }
 
+string t_erl_generator::render_base_type(t_type* type) {
+  t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
+  switch (tbase) {
+  case t_base_type::TYPE_STRING:
+    return render_string_type();
+  case t_base_type::TYPE_BOOL:
+    return "boolean()";
+  case t_base_type::TYPE_I8:
+  case t_base_type::TYPE_I16:
+  case t_base_type::TYPE_I32:
+  case t_base_type::TYPE_I64:
+    return "integer()";
+  case t_base_type::TYPE_DOUBLE:
+    return "float()";
+  default:
+    throw "compiler error: unsupported base type " + t_base_type::t_base_name(tbase);
+  }
+}
+
 string t_erl_generator::render_string_type() {
   switch (string_to_) {
   case StringTo::String:
@@ -870,24 +876,8 @@
 
 string t_erl_generator::render_typedef_type(t_type* ttype) {
   if (ttype->is_base_type()) {
-    t_base_type::t_base tbase = ((t_base_type*)ttype)->get_base();
-    switch (tbase) {
-    case t_base_type::TYPE_STRING:
-      return render_string_type();
-    case t_base_type::TYPE_BOOL:
-      return "boolean()";
-    case t_base_type::TYPE_I8:
-    case t_base_type::TYPE_I16:
-    case t_base_type::TYPE_I32:
-    case t_base_type::TYPE_I64:
-      return "integer()";
-    case t_base_type::TYPE_DOUBLE:
-      return "float()";
-    default:
-      throw "compiler error: unsupported base type " + t_base_type::t_base_name(tbase);
-    }
-  }
-   else if (ttype->is_enum()) {
+    return render_base_type(ttype);
+  } else if (ttype->is_enum()) {
     return type_name(ttype) + "()";
   } else if (ttype->is_struct() || ttype->is_xception() || ttype->is_typedef()) {
     return type_name(ttype) + "()";