diff --git a/include/ceres/rotation.h b/include/ceres/rotation.h
index ffac4f1..ea0b769 100644
--- a/include/ceres/rotation.h
+++ b/include/ceres/rotation.h
@@ -83,7 +83,7 @@
 // The implementation may be used with auto-differentiation up to the first
 // derivative, higher derivatives may have unexpected results near the origin.
 template<typename T>
-void AngleAxisToQuaternion(T const* angle_axis, T* quaternion);
+void AngleAxisToQuaternion(const T* angle_axis, T* quaternion);
 
 // Convert a quaternion to the equivalent combined axis-angle representation.
 // The value quaternion must be a unit quaternion - it is not normalized first,
@@ -92,13 +92,13 @@
 // The implemention may be used with auto-differentiation up to the first
 // derivative, higher derivatives may have unexpected results near the origin.
 template<typename T>
-void QuaternionToAngleAxis(T const* quaternion, T* angle_axis);
+void QuaternionToAngleAxis(const T* quaternion, T* angle_axis);
 
 // Conversions between 3x3 rotation matrix (in column major order) and
 // axis-angle rotation representations.  Templated for use with
 // autodifferentiation.
 template <typename T>
-void RotationMatrixToAngleAxis(T const* R, T* angle_axis);
+void RotationMatrixToAngleAxis(const T* R, T* angle_axis);
 
 template <typename T, int row_stride, int col_stride>
 void RotationMatrixToAngleAxis(
@@ -106,11 +106,11 @@
     T* angle_axis);
 
 template <typename T>
-void AngleAxisToRotationMatrix(T const* angle_axis, T* R);
+void AngleAxisToRotationMatrix(const T* angle_axis, T* R);
 
 template <typename T, int row_stride, int col_stride>
 void AngleAxisToRotationMatrix(
-    T const* angle_axis,
+    const T* angle_axis,
     const MatrixAdapter<T, row_stride, col_stride>& R);
 
 // Conversions between 3x3 rotation matrix (in row major order) and
@@ -300,14 +300,14 @@
 // occurs and deals with them by taking code paths that are guaranteed
 // to not perform division by a small number.
 template <typename T>
-inline void RotationMatrixToAngleAxis(const T * R, T * angle_axis) {
+inline void RotationMatrixToAngleAxis(const T* R, T* angle_axis) {
   RotationMatrixToAngleAxis(ColumnMajorAdapter3x3(R), angle_axis);
 }
 
 template <typename T, int row_stride, int col_stride>
 void RotationMatrixToAngleAxis(
     const MatrixAdapter<const T, row_stride, col_stride>& R,
-    T * angle_axis) {
+    T* angle_axis) {
   // x = k * 2 * sin(theta), where k is the axis of rotation.
   angle_axis[0] = R(2, 1) - R(1, 2);
   angle_axis[1] = R(0, 2) - R(2, 0);
@@ -385,13 +385,13 @@
 }
 
 template <typename T>
-inline void AngleAxisToRotationMatrix(const T * angle_axis, T * R) {
+inline void AngleAxisToRotationMatrix(const T* angle_axis, T* R) {
   AngleAxisToRotationMatrix(angle_axis, ColumnMajorAdapter3x3(R));
 }
 
 template <typename T, int row_stride, int col_stride>
 void AngleAxisToRotationMatrix(
-    const T * angle_axis,
+    const T* angle_axis,
     const MatrixAdapter<T, row_stride, col_stride>& R) {
   static const T kOne = T(1.0);
   const T theta2 = DotProduct(angle_axis, angle_axis);
