diff --git a/src/multibody/joint/joint-base.hpp b/src/multibody/joint/joint-base.hpp
index ca4b930451e197651b27c7db1a052653525b59dc..0db5e8a4d07071da15efb1e3ea17c7ec814ce738 100644
--- a/src/multibody/joint/joint-base.hpp
+++ b/src/multibody/joint/joint-base.hpp
@@ -82,6 +82,39 @@ namespace se3
 #define SE3_JOINT_TYPEDEF SE3_JOINT_TYPEDEF_ARG()
 #define SE3_JOINT_TYPEDEF_TEMPLATE SE3_JOINT_TYPEDEF_ARG(typename)
 
+#elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 4) && (__GNUC_PATCHLEVEL__ == 2)
+
+#define SE3_JOINT_TYPEDEF_NOARG()				\
+  typedef int Index;						\
+  typedef traits<Joint>::JointData JointData;			\
+  typedef traits<Joint>::JointModel JointModel;			\
+  typedef traits<Joint>::Constraint_t Constraint_t;		\
+  typedef traits<Joint>::Transformation_t Transformation_t;	\
+  typedef traits<Joint>::Motion_t Motion_t;			\
+  typedef traits<Joint>::Bias_t Bias_t;				\
+  typedef traits<Joint>::F_t F_t;				\
+  enum {							\
+    NQ = traits<Joint>::NQ,					\
+    NV = traits<Joint>::NV					\
+  }
+
+#define SE3_JOINT_TYPEDEF_ARG(prefix)					\
+  typedef int Index;							\
+  typedef prefix traits<Joint>::JointData JointData;			\
+  typedef prefix traits<Joint>::JointModel JointModel;			\
+  typedef prefix traits<Joint>::Constraint_t Constraint_t;		\
+  typedef prefix traits<Joint>::Transformation_t Transformation_t;	\
+  typedef prefix traits<Joint>::Motion_t Motion_t;			\
+  typedef prefix traits<Joint>::Bias_t Bias_t;				\
+  typedef prefix traits<Joint>::F_t F_t;				\
+  enum {								\
+    NQ = traits<Joint>::NQ,						\
+    NV = traits<Joint>::NV						\
+  }
+
+#define SE3_JOINT_TYPEDEF SE3_JOINT_TYPEDEF_NOARG()
+#define SE3_JOINT_TYPEDEF_TEMPLATE SE3_JOINT_TYPEDEF_ARG(typename)
+
 #else
 
 #define SE3_JOINT_TYPEDEF_ARG()              \