浏览代码

Fixed GTX_vec_swizzle build

Christophe Riccio 9 年之前
父节点
当前提交
1a460419f9
共有 1 个文件被更改,包括 484 次插入484 次删除
  1. 484 484
      glm/gtx/vec_swizzle.hpp

+ 484 - 484
glm/gtx/vec_swizzle.hpp

@@ -4,2757 +4,2757 @@
 
 
 namespace glm {
 namespace glm {
 	// xx
 	// xx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> xx(const glm::tvec1<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> xx(const glm::tvec1<T, P> &v) {
 		return glm::tvec2<T, P>(v.x, v.x);
 		return glm::tvec2<T, P>(v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> xx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> xx(const glm::tvec2<T, P> &v) {
 		return glm::tvec2<T, P>(v.x, v.x);
 		return glm::tvec2<T, P>(v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> xx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> xx(const glm::tvec3<T, P> &v) {
 		return glm::tvec2<T, P>(v.x, v.x);
 		return glm::tvec2<T, P>(v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> xx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> xx(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.x, v.x);
 		return glm::tvec2<T, P>(v.x, v.x);
 	}
 	}
 
 
 	// xy
 	// xy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> xy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> xy(const glm::tvec2<T, P> &v) {
 		return glm::tvec2<T, P>(v.x, v.y);
 		return glm::tvec2<T, P>(v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> xy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> xy(const glm::tvec3<T, P> &v) {
 		return glm::tvec2<T, P>(v.x, v.y);
 		return glm::tvec2<T, P>(v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> xy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> xy(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.x, v.y);
 		return glm::tvec2<T, P>(v.x, v.y);
 	}
 	}
 
 
 	// xz
 	// xz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> xz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> xz(const glm::tvec3<T, P> &v) {
 		return glm::tvec2<T, P>(v.x, v.z);
 		return glm::tvec2<T, P>(v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> xz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> xz(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.x, v.z);
 		return glm::tvec2<T, P>(v.x, v.z);
 	}
 	}
 
 
 	// xw
 	// xw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> xw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> xw(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.x, v.w);
 		return glm::tvec2<T, P>(v.x, v.w);
 	}
 	}
 
 
 	// yx
 	// yx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> yx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> yx(const glm::tvec2<T, P> &v) {
 		return glm::tvec2<T, P>(v.y, v.x);
 		return glm::tvec2<T, P>(v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> yx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> yx(const glm::tvec3<T, P> &v) {
 		return glm::tvec2<T, P>(v.y, v.x);
 		return glm::tvec2<T, P>(v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> yx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> yx(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.y, v.x);
 		return glm::tvec2<T, P>(v.y, v.x);
 	}
 	}
 
 
 	// yy
 	// yy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> yy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> yy(const glm::tvec2<T, P> &v) {
 		return glm::tvec2<T, P>(v.y, v.y);
 		return glm::tvec2<T, P>(v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> yy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> yy(const glm::tvec3<T, P> &v) {
 		return glm::tvec2<T, P>(v.y, v.y);
 		return glm::tvec2<T, P>(v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> yy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> yy(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.y, v.y);
 		return glm::tvec2<T, P>(v.y, v.y);
 	}
 	}
 
 
 	// yz
 	// yz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> yz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> yz(const glm::tvec3<T, P> &v) {
 		return glm::tvec2<T, P>(v.y, v.z);
 		return glm::tvec2<T, P>(v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> yz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> yz(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.y, v.z);
 		return glm::tvec2<T, P>(v.y, v.z);
 	}
 	}
 
 
 	// yw
 	// yw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> yw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> yw(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.y, v.w);
 		return glm::tvec2<T, P>(v.y, v.w);
 	}
 	}
 
 
 	// zx
 	// zx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> zx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> zx(const glm::tvec3<T, P> &v) {
 		return glm::tvec2<T, P>(v.z, v.x);
 		return glm::tvec2<T, P>(v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> zx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> zx(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.z, v.x);
 		return glm::tvec2<T, P>(v.z, v.x);
 	}
 	}
 
 
 	// zy
 	// zy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> zy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> zy(const glm::tvec3<T, P> &v) {
 		return glm::tvec2<T, P>(v.z, v.y);
 		return glm::tvec2<T, P>(v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> zy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> zy(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.z, v.y);
 		return glm::tvec2<T, P>(v.z, v.y);
 	}
 	}
 
 
 	// zz
 	// zz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> zz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> zz(const glm::tvec3<T, P> &v) {
 		return glm::tvec2<T, P>(v.z, v.z);
 		return glm::tvec2<T, P>(v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> zz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> zz(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.z, v.z);
 		return glm::tvec2<T, P>(v.z, v.z);
 	}
 	}
 
 
 	// zw
 	// zw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> zw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> zw(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.z, v.w);
 		return glm::tvec2<T, P>(v.z, v.w);
 	}
 	}
 
 
 	// wx
 	// wx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> wx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> wx(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.w, v.x);
 		return glm::tvec2<T, P>(v.w, v.x);
 	}
 	}
 
 
 	// wy
 	// wy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> wy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> wy(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.w, v.y);
 		return glm::tvec2<T, P>(v.w, v.y);
 	}
 	}
 
 
 	// wz
 	// wz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> wz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> wz(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.w, v.z);
 		return glm::tvec2<T, P>(v.w, v.z);
 	}
 	}
 
 
 	// ww
 	// ww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec2<T, P> ww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec2<T, P> ww(const glm::tvec4<T, P> &v) {
 		return glm::tvec2<T, P>(v.w, v.w);
 		return glm::tvec2<T, P>(v.w, v.w);
 	}
 	}
 
 
 	// xxx
 	// xxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xxx(const glm::tvec1<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xxx(const glm::tvec1<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.x, v.x);
 		return glm::tvec3<T, P>(v.x, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xxx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xxx(const glm::tvec2<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.x, v.x);
 		return glm::tvec3<T, P>(v.x, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xxx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xxx(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.x, v.x);
 		return glm::tvec3<T, P>(v.x, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.x, v.x);
 		return glm::tvec3<T, P>(v.x, v.x, v.x);
 	}
 	}
 
 
 	// xxy
 	// xxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xxy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xxy(const glm::tvec2<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.x, v.y);
 		return glm::tvec3<T, P>(v.x, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xxy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xxy(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.x, v.y);
 		return glm::tvec3<T, P>(v.x, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.x, v.y);
 		return glm::tvec3<T, P>(v.x, v.x, v.y);
 	}
 	}
 
 
 	// xxz
 	// xxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xxz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xxz(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.x, v.z);
 		return glm::tvec3<T, P>(v.x, v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.x, v.z);
 		return glm::tvec3<T, P>(v.x, v.x, v.z);
 	}
 	}
 
 
 	// xxw
 	// xxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.x, v.w);
 		return glm::tvec3<T, P>(v.x, v.x, v.w);
 	}
 	}
 
 
 	// xyx
 	// xyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xyx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xyx(const glm::tvec2<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.y, v.x);
 		return glm::tvec3<T, P>(v.x, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xyx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xyx(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.y, v.x);
 		return glm::tvec3<T, P>(v.x, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.y, v.x);
 		return glm::tvec3<T, P>(v.x, v.y, v.x);
 	}
 	}
 
 
 	// xyy
 	// xyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xyy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xyy(const glm::tvec2<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.y, v.y);
 		return glm::tvec3<T, P>(v.x, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xyy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xyy(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.y, v.y);
 		return glm::tvec3<T, P>(v.x, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.y, v.y);
 		return glm::tvec3<T, P>(v.x, v.y, v.y);
 	}
 	}
 
 
 	// xyz
 	// xyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xyz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xyz(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.y, v.z);
 		return glm::tvec3<T, P>(v.x, v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.y, v.z);
 		return glm::tvec3<T, P>(v.x, v.y, v.z);
 	}
 	}
 
 
 	// xyw
 	// xyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.y, v.w);
 		return glm::tvec3<T, P>(v.x, v.y, v.w);
 	}
 	}
 
 
 	// xzx
 	// xzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xzx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xzx(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.z, v.x);
 		return glm::tvec3<T, P>(v.x, v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.z, v.x);
 		return glm::tvec3<T, P>(v.x, v.z, v.x);
 	}
 	}
 
 
 	// xzy
 	// xzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xzy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xzy(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.z, v.y);
 		return glm::tvec3<T, P>(v.x, v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.z, v.y);
 		return glm::tvec3<T, P>(v.x, v.z, v.y);
 	}
 	}
 
 
 	// xzz
 	// xzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xzz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xzz(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.z, v.z);
 		return glm::tvec3<T, P>(v.x, v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.z, v.z);
 		return glm::tvec3<T, P>(v.x, v.z, v.z);
 	}
 	}
 
 
 	// xzw
 	// xzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.z, v.w);
 		return glm::tvec3<T, P>(v.x, v.z, v.w);
 	}
 	}
 
 
 	// xwx
 	// xwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.w, v.x);
 		return glm::tvec3<T, P>(v.x, v.w, v.x);
 	}
 	}
 
 
 	// xwy
 	// xwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.w, v.y);
 		return glm::tvec3<T, P>(v.x, v.w, v.y);
 	}
 	}
 
 
 	// xwz
 	// xwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.w, v.z);
 		return glm::tvec3<T, P>(v.x, v.w, v.z);
 	}
 	}
 
 
 	// xww
 	// xww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> xww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> xww(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.x, v.w, v.w);
 		return glm::tvec3<T, P>(v.x, v.w, v.w);
 	}
 	}
 
 
 	// yxx
 	// yxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yxx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yxx(const glm::tvec2<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.x, v.x);
 		return glm::tvec3<T, P>(v.y, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yxx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yxx(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.x, v.x);
 		return glm::tvec3<T, P>(v.y, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.x, v.x);
 		return glm::tvec3<T, P>(v.y, v.x, v.x);
 	}
 	}
 
 
 	// yxy
 	// yxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yxy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yxy(const glm::tvec2<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.x, v.y);
 		return glm::tvec3<T, P>(v.y, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yxy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yxy(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.x, v.y);
 		return glm::tvec3<T, P>(v.y, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.x, v.y);
 		return glm::tvec3<T, P>(v.y, v.x, v.y);
 	}
 	}
 
 
 	// yxz
 	// yxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yxz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yxz(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.x, v.z);
 		return glm::tvec3<T, P>(v.y, v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.x, v.z);
 		return glm::tvec3<T, P>(v.y, v.x, v.z);
 	}
 	}
 
 
 	// yxw
 	// yxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.x, v.w);
 		return glm::tvec3<T, P>(v.y, v.x, v.w);
 	}
 	}
 
 
 	// yyx
 	// yyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yyx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yyx(const glm::tvec2<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.y, v.x);
 		return glm::tvec3<T, P>(v.y, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yyx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yyx(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.y, v.x);
 		return glm::tvec3<T, P>(v.y, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.y, v.x);
 		return glm::tvec3<T, P>(v.y, v.y, v.x);
 	}
 	}
 
 
 	// yyy
 	// yyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yyy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yyy(const glm::tvec2<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.y, v.y);
 		return glm::tvec3<T, P>(v.y, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yyy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yyy(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.y, v.y);
 		return glm::tvec3<T, P>(v.y, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.y, v.y);
 		return glm::tvec3<T, P>(v.y, v.y, v.y);
 	}
 	}
 
 
 	// yyz
 	// yyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yyz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yyz(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.y, v.z);
 		return glm::tvec3<T, P>(v.y, v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.y, v.z);
 		return glm::tvec3<T, P>(v.y, v.y, v.z);
 	}
 	}
 
 
 	// yyw
 	// yyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.y, v.w);
 		return glm::tvec3<T, P>(v.y, v.y, v.w);
 	}
 	}
 
 
 	// yzx
 	// yzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yzx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yzx(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.z, v.x);
 		return glm::tvec3<T, P>(v.y, v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.z, v.x);
 		return glm::tvec3<T, P>(v.y, v.z, v.x);
 	}
 	}
 
 
 	// yzy
 	// yzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yzy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yzy(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.z, v.y);
 		return glm::tvec3<T, P>(v.y, v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.z, v.y);
 		return glm::tvec3<T, P>(v.y, v.z, v.y);
 	}
 	}
 
 
 	// yzz
 	// yzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yzz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yzz(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.z, v.z);
 		return glm::tvec3<T, P>(v.y, v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.z, v.z);
 		return glm::tvec3<T, P>(v.y, v.z, v.z);
 	}
 	}
 
 
 	// yzw
 	// yzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.z, v.w);
 		return glm::tvec3<T, P>(v.y, v.z, v.w);
 	}
 	}
 
 
 	// ywx
 	// ywx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> ywx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> ywx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.w, v.x);
 		return glm::tvec3<T, P>(v.y, v.w, v.x);
 	}
 	}
 
 
 	// ywy
 	// ywy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> ywy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> ywy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.w, v.y);
 		return glm::tvec3<T, P>(v.y, v.w, v.y);
 	}
 	}
 
 
 	// ywz
 	// ywz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> ywz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> ywz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.w, v.z);
 		return glm::tvec3<T, P>(v.y, v.w, v.z);
 	}
 	}
 
 
 	// yww
 	// yww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> yww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> yww(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.y, v.w, v.w);
 		return glm::tvec3<T, P>(v.y, v.w, v.w);
 	}
 	}
 
 
 	// zxx
 	// zxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zxx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zxx(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.x, v.x);
 		return glm::tvec3<T, P>(v.z, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.x, v.x);
 		return glm::tvec3<T, P>(v.z, v.x, v.x);
 	}
 	}
 
 
 	// zxy
 	// zxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zxy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zxy(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.x, v.y);
 		return glm::tvec3<T, P>(v.z, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.x, v.y);
 		return glm::tvec3<T, P>(v.z, v.x, v.y);
 	}
 	}
 
 
 	// zxz
 	// zxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zxz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zxz(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.x, v.z);
 		return glm::tvec3<T, P>(v.z, v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.x, v.z);
 		return glm::tvec3<T, P>(v.z, v.x, v.z);
 	}
 	}
 
 
 	// zxw
 	// zxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.x, v.w);
 		return glm::tvec3<T, P>(v.z, v.x, v.w);
 	}
 	}
 
 
 	// zyx
 	// zyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zyx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zyx(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.y, v.x);
 		return glm::tvec3<T, P>(v.z, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.y, v.x);
 		return glm::tvec3<T, P>(v.z, v.y, v.x);
 	}
 	}
 
 
 	// zyy
 	// zyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zyy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zyy(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.y, v.y);
 		return glm::tvec3<T, P>(v.z, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.y, v.y);
 		return glm::tvec3<T, P>(v.z, v.y, v.y);
 	}
 	}
 
 
 	// zyz
 	// zyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zyz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zyz(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.y, v.z);
 		return glm::tvec3<T, P>(v.z, v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.y, v.z);
 		return glm::tvec3<T, P>(v.z, v.y, v.z);
 	}
 	}
 
 
 	// zyw
 	// zyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.y, v.w);
 		return glm::tvec3<T, P>(v.z, v.y, v.w);
 	}
 	}
 
 
 	// zzx
 	// zzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zzx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zzx(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.z, v.x);
 		return glm::tvec3<T, P>(v.z, v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.z, v.x);
 		return glm::tvec3<T, P>(v.z, v.z, v.x);
 	}
 	}
 
 
 	// zzy
 	// zzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zzy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zzy(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.z, v.y);
 		return glm::tvec3<T, P>(v.z, v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.z, v.y);
 		return glm::tvec3<T, P>(v.z, v.z, v.y);
 	}
 	}
 
 
 	// zzz
 	// zzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zzz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zzz(const glm::tvec3<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.z, v.z);
 		return glm::tvec3<T, P>(v.z, v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.z, v.z);
 		return glm::tvec3<T, P>(v.z, v.z, v.z);
 	}
 	}
 
 
 	// zzw
 	// zzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.z, v.w);
 		return glm::tvec3<T, P>(v.z, v.z, v.w);
 	}
 	}
 
 
 	// zwx
 	// zwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.w, v.x);
 		return glm::tvec3<T, P>(v.z, v.w, v.x);
 	}
 	}
 
 
 	// zwy
 	// zwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.w, v.y);
 		return glm::tvec3<T, P>(v.z, v.w, v.y);
 	}
 	}
 
 
 	// zwz
 	// zwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.w, v.z);
 		return glm::tvec3<T, P>(v.z, v.w, v.z);
 	}
 	}
 
 
 	// zww
 	// zww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> zww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> zww(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.z, v.w, v.w);
 		return glm::tvec3<T, P>(v.z, v.w, v.w);
 	}
 	}
 
 
 	// wxx
 	// wxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.x, v.x);
 		return glm::tvec3<T, P>(v.w, v.x, v.x);
 	}
 	}
 
 
 	// wxy
 	// wxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.x, v.y);
 		return glm::tvec3<T, P>(v.w, v.x, v.y);
 	}
 	}
 
 
 	// wxz
 	// wxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.x, v.z);
 		return glm::tvec3<T, P>(v.w, v.x, v.z);
 	}
 	}
 
 
 	// wxw
 	// wxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.x, v.w);
 		return glm::tvec3<T, P>(v.w, v.x, v.w);
 	}
 	}
 
 
 	// wyx
 	// wyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.y, v.x);
 		return glm::tvec3<T, P>(v.w, v.y, v.x);
 	}
 	}
 
 
 	// wyy
 	// wyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.y, v.y);
 		return glm::tvec3<T, P>(v.w, v.y, v.y);
 	}
 	}
 
 
 	// wyz
 	// wyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.y, v.z);
 		return glm::tvec3<T, P>(v.w, v.y, v.z);
 	}
 	}
 
 
 	// wyw
 	// wyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.y, v.w);
 		return glm::tvec3<T, P>(v.w, v.y, v.w);
 	}
 	}
 
 
 	// wzx
 	// wzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.z, v.x);
 		return glm::tvec3<T, P>(v.w, v.z, v.x);
 	}
 	}
 
 
 	// wzy
 	// wzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.z, v.y);
 		return glm::tvec3<T, P>(v.w, v.z, v.y);
 	}
 	}
 
 
 	// wzz
 	// wzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.z, v.z);
 		return glm::tvec3<T, P>(v.w, v.z, v.z);
 	}
 	}
 
 
 	// wzw
 	// wzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.z, v.w);
 		return glm::tvec3<T, P>(v.w, v.z, v.w);
 	}
 	}
 
 
 	// wwx
 	// wwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.w, v.x);
 		return glm::tvec3<T, P>(v.w, v.w, v.x);
 	}
 	}
 
 
 	// wwy
 	// wwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.w, v.y);
 		return glm::tvec3<T, P>(v.w, v.w, v.y);
 	}
 	}
 
 
 	// wwz
 	// wwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> wwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> wwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.w, v.z);
 		return glm::tvec3<T, P>(v.w, v.w, v.z);
 	}
 	}
 
 
 	// www
 	// www
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec3<T, P> www(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec3<T, P> www(const glm::tvec4<T, P> &v) {
 		return glm::tvec3<T, P>(v.w, v.w, v.w);
 		return glm::tvec3<T, P>(v.w, v.w, v.w);
 	}
 	}
 
 
 	// xxxx
 	// xxxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxxx(const glm::tvec1<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxxx(const glm::tvec1<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.x);
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxxx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxxx(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.x);
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxxx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxxx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.x);
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.x);
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.x);
 	}
 	}
 
 
 	// xxxy
 	// xxxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxxy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxxy(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.y);
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxxy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxxy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.y);
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.y);
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.y);
 	}
 	}
 
 
 	// xxxz
 	// xxxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxxz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxxz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.z);
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.z);
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.z);
 	}
 	}
 
 
 	// xxxw
 	// xxxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.w);
 		return glm::tvec4<T, P>(v.x, v.x, v.x, v.w);
 	}
 	}
 
 
 	// xxyx
 	// xxyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxyx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxyx(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.x);
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxyx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxyx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.x);
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.x);
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.x);
 	}
 	}
 
 
 	// xxyy
 	// xxyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxyy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxyy(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.y);
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxyy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxyy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.y);
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.y);
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.y);
 	}
 	}
 
 
 	// xxyz
 	// xxyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxyz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxyz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.z);
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.z);
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.z);
 	}
 	}
 
 
 	// xxyw
 	// xxyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.w);
 		return glm::tvec4<T, P>(v.x, v.x, v.y, v.w);
 	}
 	}
 
 
 	// xxzx
 	// xxzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxzx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxzx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.x);
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.x);
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.x);
 	}
 	}
 
 
 	// xxzy
 	// xxzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxzy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxzy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.y);
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.y);
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.y);
 	}
 	}
 
 
 	// xxzz
 	// xxzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxzz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxzz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.z);
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.z);
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.z);
 	}
 	}
 
 
 	// xxzw
 	// xxzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.w);
 		return glm::tvec4<T, P>(v.x, v.x, v.z, v.w);
 	}
 	}
 
 
 	// xxwx
 	// xxwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.w, v.x);
 		return glm::tvec4<T, P>(v.x, v.x, v.w, v.x);
 	}
 	}
 
 
 	// xxwy
 	// xxwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.w, v.y);
 		return glm::tvec4<T, P>(v.x, v.x, v.w, v.y);
 	}
 	}
 
 
 	// xxwz
 	// xxwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.w, v.z);
 		return glm::tvec4<T, P>(v.x, v.x, v.w, v.z);
 	}
 	}
 
 
 	// xxww
 	// xxww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xxww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xxww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.x, v.w, v.w);
 		return glm::tvec4<T, P>(v.x, v.x, v.w, v.w);
 	}
 	}
 
 
 	// xyxx
 	// xyxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyxx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyxx(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.x);
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyxx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyxx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.x);
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.x);
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.x);
 	}
 	}
 
 
 	// xyxy
 	// xyxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyxy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyxy(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.y);
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyxy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyxy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.y);
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.y);
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.y);
 	}
 	}
 
 
 	// xyxz
 	// xyxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyxz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyxz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.z);
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.z);
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.z);
 	}
 	}
 
 
 	// xyxw
 	// xyxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.w);
 		return glm::tvec4<T, P>(v.x, v.y, v.x, v.w);
 	}
 	}
 
 
 	// xyyx
 	// xyyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyyx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyyx(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.x);
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyyx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyyx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.x);
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.x);
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.x);
 	}
 	}
 
 
 	// xyyy
 	// xyyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyyy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyyy(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.y);
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyyy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyyy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.y);
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.y);
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.y);
 	}
 	}
 
 
 	// xyyz
 	// xyyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyyz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyyz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.z);
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.z);
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.z);
 	}
 	}
 
 
 	// xyyw
 	// xyyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.w);
 		return glm::tvec4<T, P>(v.x, v.y, v.y, v.w);
 	}
 	}
 
 
 	// xyzx
 	// xyzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyzx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyzx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.x);
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.x);
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.x);
 	}
 	}
 
 
 	// xyzy
 	// xyzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyzy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyzy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.y);
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.y);
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.y);
 	}
 	}
 
 
 	// xyzz
 	// xyzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyzz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyzz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.z);
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.z);
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.z);
 	}
 	}
 
 
 	// xyzw
 	// xyzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.w);
 		return glm::tvec4<T, P>(v.x, v.y, v.z, v.w);
 	}
 	}
 
 
 	// xywx
 	// xywx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xywx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xywx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.w, v.x);
 		return glm::tvec4<T, P>(v.x, v.y, v.w, v.x);
 	}
 	}
 
 
 	// xywy
 	// xywy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xywy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xywy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.w, v.y);
 		return glm::tvec4<T, P>(v.x, v.y, v.w, v.y);
 	}
 	}
 
 
 	// xywz
 	// xywz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xywz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xywz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.w, v.z);
 		return glm::tvec4<T, P>(v.x, v.y, v.w, v.z);
 	}
 	}
 
 
 	// xyww
 	// xyww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xyww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xyww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.y, v.w, v.w);
 		return glm::tvec4<T, P>(v.x, v.y, v.w, v.w);
 	}
 	}
 
 
 	// xzxx
 	// xzxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzxx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzxx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.x);
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.x);
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.x);
 	}
 	}
 
 
 	// xzxy
 	// xzxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzxy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzxy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.y);
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.y);
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.y);
 	}
 	}
 
 
 	// xzxz
 	// xzxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzxz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzxz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.z);
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.z);
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.z);
 	}
 	}
 
 
 	// xzxw
 	// xzxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.w);
 		return glm::tvec4<T, P>(v.x, v.z, v.x, v.w);
 	}
 	}
 
 
 	// xzyx
 	// xzyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzyx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzyx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.x);
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.x);
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.x);
 	}
 	}
 
 
 	// xzyy
 	// xzyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzyy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzyy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.y);
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.y);
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.y);
 	}
 	}
 
 
 	// xzyz
 	// xzyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzyz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzyz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.z);
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.z);
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.z);
 	}
 	}
 
 
 	// xzyw
 	// xzyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.w);
 		return glm::tvec4<T, P>(v.x, v.z, v.y, v.w);
 	}
 	}
 
 
 	// xzzx
 	// xzzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzzx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzzx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.x);
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.x);
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.x);
 	}
 	}
 
 
 	// xzzy
 	// xzzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzzy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzzy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.y);
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.y);
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.y);
 	}
 	}
 
 
 	// xzzz
 	// xzzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzzz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzzz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.z);
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.z);
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.z);
 	}
 	}
 
 
 	// xzzw
 	// xzzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.w);
 		return glm::tvec4<T, P>(v.x, v.z, v.z, v.w);
 	}
 	}
 
 
 	// xzwx
 	// xzwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.w, v.x);
 		return glm::tvec4<T, P>(v.x, v.z, v.w, v.x);
 	}
 	}
 
 
 	// xzwy
 	// xzwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.w, v.y);
 		return glm::tvec4<T, P>(v.x, v.z, v.w, v.y);
 	}
 	}
 
 
 	// xzwz
 	// xzwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.w, v.z);
 		return glm::tvec4<T, P>(v.x, v.z, v.w, v.z);
 	}
 	}
 
 
 	// xzww
 	// xzww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xzww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xzww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.z, v.w, v.w);
 		return glm::tvec4<T, P>(v.x, v.z, v.w, v.w);
 	}
 	}
 
 
 	// xwxx
 	// xwxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.x, v.x);
 		return glm::tvec4<T, P>(v.x, v.w, v.x, v.x);
 	}
 	}
 
 
 	// xwxy
 	// xwxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.x, v.y);
 		return glm::tvec4<T, P>(v.x, v.w, v.x, v.y);
 	}
 	}
 
 
 	// xwxz
 	// xwxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.x, v.z);
 		return glm::tvec4<T, P>(v.x, v.w, v.x, v.z);
 	}
 	}
 
 
 	// xwxw
 	// xwxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.x, v.w);
 		return glm::tvec4<T, P>(v.x, v.w, v.x, v.w);
 	}
 	}
 
 
 	// xwyx
 	// xwyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.y, v.x);
 		return glm::tvec4<T, P>(v.x, v.w, v.y, v.x);
 	}
 	}
 
 
 	// xwyy
 	// xwyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.y, v.y);
 		return glm::tvec4<T, P>(v.x, v.w, v.y, v.y);
 	}
 	}
 
 
 	// xwyz
 	// xwyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.y, v.z);
 		return glm::tvec4<T, P>(v.x, v.w, v.y, v.z);
 	}
 	}
 
 
 	// xwyw
 	// xwyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.y, v.w);
 		return glm::tvec4<T, P>(v.x, v.w, v.y, v.w);
 	}
 	}
 
 
 	// xwzx
 	// xwzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.z, v.x);
 		return glm::tvec4<T, P>(v.x, v.w, v.z, v.x);
 	}
 	}
 
 
 	// xwzy
 	// xwzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.z, v.y);
 		return glm::tvec4<T, P>(v.x, v.w, v.z, v.y);
 	}
 	}
 
 
 	// xwzz
 	// xwzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.z, v.z);
 		return glm::tvec4<T, P>(v.x, v.w, v.z, v.z);
 	}
 	}
 
 
 	// xwzw
 	// xwzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.z, v.w);
 		return glm::tvec4<T, P>(v.x, v.w, v.z, v.w);
 	}
 	}
 
 
 	// xwwx
 	// xwwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.w, v.x);
 		return glm::tvec4<T, P>(v.x, v.w, v.w, v.x);
 	}
 	}
 
 
 	// xwwy
 	// xwwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.w, v.y);
 		return glm::tvec4<T, P>(v.x, v.w, v.w, v.y);
 	}
 	}
 
 
 	// xwwz
 	// xwwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.w, v.z);
 		return glm::tvec4<T, P>(v.x, v.w, v.w, v.z);
 	}
 	}
 
 
 	// xwww
 	// xwww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> xwww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> xwww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.x, v.w, v.w, v.w);
 		return glm::tvec4<T, P>(v.x, v.w, v.w, v.w);
 	}
 	}
 
 
 	// yxxx
 	// yxxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxxx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxxx(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.x);
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxxx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxxx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.x);
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.x);
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.x);
 	}
 	}
 
 
 	// yxxy
 	// yxxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxxy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxxy(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.y);
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxxy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxxy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.y);
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.y);
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.y);
 	}
 	}
 
 
 	// yxxz
 	// yxxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxxz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxxz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.z);
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.z);
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.z);
 	}
 	}
 
 
 	// yxxw
 	// yxxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.w);
 		return glm::tvec4<T, P>(v.y, v.x, v.x, v.w);
 	}
 	}
 
 
 	// yxyx
 	// yxyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxyx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxyx(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.x);
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxyx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxyx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.x);
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.x);
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.x);
 	}
 	}
 
 
 	// yxyy
 	// yxyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxyy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxyy(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.y);
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxyy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxyy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.y);
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.y);
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.y);
 	}
 	}
 
 
 	// yxyz
 	// yxyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxyz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxyz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.z);
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.z);
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.z);
 	}
 	}
 
 
 	// yxyw
 	// yxyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.w);
 		return glm::tvec4<T, P>(v.y, v.x, v.y, v.w);
 	}
 	}
 
 
 	// yxzx
 	// yxzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxzx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxzx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.x);
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.x);
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.x);
 	}
 	}
 
 
 	// yxzy
 	// yxzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxzy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxzy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.y);
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.y);
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.y);
 	}
 	}
 
 
 	// yxzz
 	// yxzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxzz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxzz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.z);
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.z);
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.z);
 	}
 	}
 
 
 	// yxzw
 	// yxzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.w);
 		return glm::tvec4<T, P>(v.y, v.x, v.z, v.w);
 	}
 	}
 
 
 	// yxwx
 	// yxwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.w, v.x);
 		return glm::tvec4<T, P>(v.y, v.x, v.w, v.x);
 	}
 	}
 
 
 	// yxwy
 	// yxwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.w, v.y);
 		return glm::tvec4<T, P>(v.y, v.x, v.w, v.y);
 	}
 	}
 
 
 	// yxwz
 	// yxwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.w, v.z);
 		return glm::tvec4<T, P>(v.y, v.x, v.w, v.z);
 	}
 	}
 
 
 	// yxww
 	// yxww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yxww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yxww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.x, v.w, v.w);
 		return glm::tvec4<T, P>(v.y, v.x, v.w, v.w);
 	}
 	}
 
 
 	// yyxx
 	// yyxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyxx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyxx(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.x);
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyxx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyxx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.x);
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.x);
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.x);
 	}
 	}
 
 
 	// yyxy
 	// yyxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyxy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyxy(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.y);
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyxy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyxy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.y);
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.y);
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.y);
 	}
 	}
 
 
 	// yyxz
 	// yyxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyxz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyxz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.z);
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.z);
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.z);
 	}
 	}
 
 
 	// yyxw
 	// yyxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.w);
 		return glm::tvec4<T, P>(v.y, v.y, v.x, v.w);
 	}
 	}
 
 
 	// yyyx
 	// yyyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyyx(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyyx(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.x);
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyyx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyyx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.x);
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.x);
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.x);
 	}
 	}
 
 
 	// yyyy
 	// yyyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyyy(const glm::tvec2<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyyy(const glm::tvec2<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.y);
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyyy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyyy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.y);
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.y);
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.y);
 	}
 	}
 
 
 	// yyyz
 	// yyyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyyz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyyz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.z);
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.z);
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.z);
 	}
 	}
 
 
 	// yyyw
 	// yyyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.w);
 		return glm::tvec4<T, P>(v.y, v.y, v.y, v.w);
 	}
 	}
 
 
 	// yyzx
 	// yyzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyzx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyzx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.x);
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.x);
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.x);
 	}
 	}
 
 
 	// yyzy
 	// yyzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyzy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyzy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.y);
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.y);
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.y);
 	}
 	}
 
 
 	// yyzz
 	// yyzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyzz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyzz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.z);
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.z);
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.z);
 	}
 	}
 
 
 	// yyzw
 	// yyzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.w);
 		return glm::tvec4<T, P>(v.y, v.y, v.z, v.w);
 	}
 	}
 
 
 	// yywx
 	// yywx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yywx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yywx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.w, v.x);
 		return glm::tvec4<T, P>(v.y, v.y, v.w, v.x);
 	}
 	}
 
 
 	// yywy
 	// yywy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yywy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yywy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.w, v.y);
 		return glm::tvec4<T, P>(v.y, v.y, v.w, v.y);
 	}
 	}
 
 
 	// yywz
 	// yywz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yywz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yywz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.w, v.z);
 		return glm::tvec4<T, P>(v.y, v.y, v.w, v.z);
 	}
 	}
 
 
 	// yyww
 	// yyww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yyww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yyww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.y, v.w, v.w);
 		return glm::tvec4<T, P>(v.y, v.y, v.w, v.w);
 	}
 	}
 
 
 	// yzxx
 	// yzxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzxx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzxx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.x);
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.x);
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.x);
 	}
 	}
 
 
 	// yzxy
 	// yzxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzxy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzxy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.y);
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.y);
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.y);
 	}
 	}
 
 
 	// yzxz
 	// yzxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzxz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzxz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.z);
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.z);
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.z);
 	}
 	}
 
 
 	// yzxw
 	// yzxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.w);
 		return glm::tvec4<T, P>(v.y, v.z, v.x, v.w);
 	}
 	}
 
 
 	// yzyx
 	// yzyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzyx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzyx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.x);
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.x);
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.x);
 	}
 	}
 
 
 	// yzyy
 	// yzyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzyy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzyy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.y);
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.y);
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.y);
 	}
 	}
 
 
 	// yzyz
 	// yzyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzyz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzyz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.z);
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.z);
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.z);
 	}
 	}
 
 
 	// yzyw
 	// yzyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.w);
 		return glm::tvec4<T, P>(v.y, v.z, v.y, v.w);
 	}
 	}
 
 
 	// yzzx
 	// yzzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzzx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzzx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.x);
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.x);
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.x);
 	}
 	}
 
 
 	// yzzy
 	// yzzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzzy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzzy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.y);
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.y);
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.y);
 	}
 	}
 
 
 	// yzzz
 	// yzzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzzz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzzz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.z);
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.z);
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.z);
 	}
 	}
 
 
 	// yzzw
 	// yzzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.w);
 		return glm::tvec4<T, P>(v.y, v.z, v.z, v.w);
 	}
 	}
 
 
 	// yzwx
 	// yzwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.w, v.x);
 		return glm::tvec4<T, P>(v.y, v.z, v.w, v.x);
 	}
 	}
 
 
 	// yzwy
 	// yzwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.w, v.y);
 		return glm::tvec4<T, P>(v.y, v.z, v.w, v.y);
 	}
 	}
 
 
 	// yzwz
 	// yzwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.w, v.z);
 		return glm::tvec4<T, P>(v.y, v.z, v.w, v.z);
 	}
 	}
 
 
 	// yzww
 	// yzww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> yzww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> yzww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.z, v.w, v.w);
 		return glm::tvec4<T, P>(v.y, v.z, v.w, v.w);
 	}
 	}
 
 
 	// ywxx
 	// ywxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.x, v.x);
 		return glm::tvec4<T, P>(v.y, v.w, v.x, v.x);
 	}
 	}
 
 
 	// ywxy
 	// ywxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.x, v.y);
 		return glm::tvec4<T, P>(v.y, v.w, v.x, v.y);
 	}
 	}
 
 
 	// ywxz
 	// ywxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.x, v.z);
 		return glm::tvec4<T, P>(v.y, v.w, v.x, v.z);
 	}
 	}
 
 
 	// ywxw
 	// ywxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.x, v.w);
 		return glm::tvec4<T, P>(v.y, v.w, v.x, v.w);
 	}
 	}
 
 
 	// ywyx
 	// ywyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.y, v.x);
 		return glm::tvec4<T, P>(v.y, v.w, v.y, v.x);
 	}
 	}
 
 
 	// ywyy
 	// ywyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.y, v.y);
 		return glm::tvec4<T, P>(v.y, v.w, v.y, v.y);
 	}
 	}
 
 
 	// ywyz
 	// ywyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.y, v.z);
 		return glm::tvec4<T, P>(v.y, v.w, v.y, v.z);
 	}
 	}
 
 
 	// ywyw
 	// ywyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.y, v.w);
 		return glm::tvec4<T, P>(v.y, v.w, v.y, v.w);
 	}
 	}
 
 
 	// ywzx
 	// ywzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.z, v.x);
 		return glm::tvec4<T, P>(v.y, v.w, v.z, v.x);
 	}
 	}
 
 
 	// ywzy
 	// ywzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.z, v.y);
 		return glm::tvec4<T, P>(v.y, v.w, v.z, v.y);
 	}
 	}
 
 
 	// ywzz
 	// ywzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.z, v.z);
 		return glm::tvec4<T, P>(v.y, v.w, v.z, v.z);
 	}
 	}
 
 
 	// ywzw
 	// ywzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.z, v.w);
 		return glm::tvec4<T, P>(v.y, v.w, v.z, v.w);
 	}
 	}
 
 
 	// ywwx
 	// ywwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.w, v.x);
 		return glm::tvec4<T, P>(v.y, v.w, v.w, v.x);
 	}
 	}
 
 
 	// ywwy
 	// ywwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.w, v.y);
 		return glm::tvec4<T, P>(v.y, v.w, v.w, v.y);
 	}
 	}
 
 
 	// ywwz
 	// ywwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.w, v.z);
 		return glm::tvec4<T, P>(v.y, v.w, v.w, v.z);
 	}
 	}
 
 
 	// ywww
 	// ywww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> ywww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> ywww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.y, v.w, v.w, v.w);
 		return glm::tvec4<T, P>(v.y, v.w, v.w, v.w);
 	}
 	}
 
 
 	// zxxx
 	// zxxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxxx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxxx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.x);
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.x);
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.x);
 	}
 	}
 
 
 	// zxxy
 	// zxxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxxy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxxy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.y);
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.y);
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.y);
 	}
 	}
 
 
 	// zxxz
 	// zxxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxxz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxxz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.z);
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.z);
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.z);
 	}
 	}
 
 
 	// zxxw
 	// zxxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.w);
 		return glm::tvec4<T, P>(v.z, v.x, v.x, v.w);
 	}
 	}
 
 
 	// zxyx
 	// zxyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxyx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxyx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.x);
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.x);
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.x);
 	}
 	}
 
 
 	// zxyy
 	// zxyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxyy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxyy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.y);
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.y);
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.y);
 	}
 	}
 
 
 	// zxyz
 	// zxyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxyz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxyz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.z);
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.z);
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.z);
 	}
 	}
 
 
 	// zxyw
 	// zxyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.w);
 		return glm::tvec4<T, P>(v.z, v.x, v.y, v.w);
 	}
 	}
 
 
 	// zxzx
 	// zxzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxzx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxzx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.x);
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.x);
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.x);
 	}
 	}
 
 
 	// zxzy
 	// zxzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxzy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxzy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.y);
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.y);
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.y);
 	}
 	}
 
 
 	// zxzz
 	// zxzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxzz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxzz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.z);
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.z);
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.z);
 	}
 	}
 
 
 	// zxzw
 	// zxzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.w);
 		return glm::tvec4<T, P>(v.z, v.x, v.z, v.w);
 	}
 	}
 
 
 	// zxwx
 	// zxwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.w, v.x);
 		return glm::tvec4<T, P>(v.z, v.x, v.w, v.x);
 	}
 	}
 
 
 	// zxwy
 	// zxwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.w, v.y);
 		return glm::tvec4<T, P>(v.z, v.x, v.w, v.y);
 	}
 	}
 
 
 	// zxwz
 	// zxwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.w, v.z);
 		return glm::tvec4<T, P>(v.z, v.x, v.w, v.z);
 	}
 	}
 
 
 	// zxww
 	// zxww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zxww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zxww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.x, v.w, v.w);
 		return glm::tvec4<T, P>(v.z, v.x, v.w, v.w);
 	}
 	}
 
 
 	// zyxx
 	// zyxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyxx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyxx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.x);
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.x);
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.x);
 	}
 	}
 
 
 	// zyxy
 	// zyxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyxy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyxy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.y);
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.y);
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.y);
 	}
 	}
 
 
 	// zyxz
 	// zyxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyxz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyxz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.z);
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.z);
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.z);
 	}
 	}
 
 
 	// zyxw
 	// zyxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.w);
 		return glm::tvec4<T, P>(v.z, v.y, v.x, v.w);
 	}
 	}
 
 
 	// zyyx
 	// zyyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyyx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyyx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.x);
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.x);
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.x);
 	}
 	}
 
 
 	// zyyy
 	// zyyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyyy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyyy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.y);
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.y);
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.y);
 	}
 	}
 
 
 	// zyyz
 	// zyyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyyz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyyz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.z);
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.z);
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.z);
 	}
 	}
 
 
 	// zyyw
 	// zyyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.w);
 		return glm::tvec4<T, P>(v.z, v.y, v.y, v.w);
 	}
 	}
 
 
 	// zyzx
 	// zyzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyzx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyzx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.x);
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.x);
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.x);
 	}
 	}
 
 
 	// zyzy
 	// zyzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyzy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyzy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.y);
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.y);
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.y);
 	}
 	}
 
 
 	// zyzz
 	// zyzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyzz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyzz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.z);
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.z);
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.z);
 	}
 	}
 
 
 	// zyzw
 	// zyzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.w);
 		return glm::tvec4<T, P>(v.z, v.y, v.z, v.w);
 	}
 	}
 
 
 	// zywx
 	// zywx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zywx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zywx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.w, v.x);
 		return glm::tvec4<T, P>(v.z, v.y, v.w, v.x);
 	}
 	}
 
 
 	// zywy
 	// zywy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zywy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zywy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.w, v.y);
 		return glm::tvec4<T, P>(v.z, v.y, v.w, v.y);
 	}
 	}
 
 
 	// zywz
 	// zywz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zywz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zywz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.w, v.z);
 		return glm::tvec4<T, P>(v.z, v.y, v.w, v.z);
 	}
 	}
 
 
 	// zyww
 	// zyww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zyww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zyww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.y, v.w, v.w);
 		return glm::tvec4<T, P>(v.z, v.y, v.w, v.w);
 	}
 	}
 
 
 	// zzxx
 	// zzxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzxx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzxx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.x);
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.x);
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.x);
 	}
 	}
 
 
 	// zzxy
 	// zzxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzxy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzxy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.y);
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.y);
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.y);
 	}
 	}
 
 
 	// zzxz
 	// zzxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzxz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzxz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.z);
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.z);
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.z);
 	}
 	}
 
 
 	// zzxw
 	// zzxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.w);
 		return glm::tvec4<T, P>(v.z, v.z, v.x, v.w);
 	}
 	}
 
 
 	// zzyx
 	// zzyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzyx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzyx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.x);
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.x);
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.x);
 	}
 	}
 
 
 	// zzyy
 	// zzyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzyy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzyy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.y);
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.y);
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.y);
 	}
 	}
 
 
 	// zzyz
 	// zzyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzyz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzyz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.z);
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.z);
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.z);
 	}
 	}
 
 
 	// zzyw
 	// zzyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.w);
 		return glm::tvec4<T, P>(v.z, v.z, v.y, v.w);
 	}
 	}
 
 
 	// zzzx
 	// zzzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzzx(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzzx(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.x);
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.x);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.x);
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.x);
 	}
 	}
 
 
 	// zzzy
 	// zzzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzzy(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzzy(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.y);
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.y);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.y);
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.y);
 	}
 	}
 
 
 	// zzzz
 	// zzzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzzz(const glm::tvec3<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzzz(const glm::tvec3<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.z);
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.z);
 	}
 	}
 
 
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.z);
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.z);
 	}
 	}
 
 
 	// zzzw
 	// zzzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.w);
 		return glm::tvec4<T, P>(v.z, v.z, v.z, v.w);
 	}
 	}
 
 
 	// zzwx
 	// zzwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.w, v.x);
 		return glm::tvec4<T, P>(v.z, v.z, v.w, v.x);
 	}
 	}
 
 
 	// zzwy
 	// zzwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.w, v.y);
 		return glm::tvec4<T, P>(v.z, v.z, v.w, v.y);
 	}
 	}
 
 
 	// zzwz
 	// zzwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.w, v.z);
 		return glm::tvec4<T, P>(v.z, v.z, v.w, v.z);
 	}
 	}
 
 
 	// zzww
 	// zzww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zzww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zzww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.z, v.w, v.w);
 		return glm::tvec4<T, P>(v.z, v.z, v.w, v.w);
 	}
 	}
 
 
 	// zwxx
 	// zwxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.x, v.x);
 		return glm::tvec4<T, P>(v.z, v.w, v.x, v.x);
 	}
 	}
 
 
 	// zwxy
 	// zwxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.x, v.y);
 		return glm::tvec4<T, P>(v.z, v.w, v.x, v.y);
 	}
 	}
 
 
 	// zwxz
 	// zwxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.x, v.z);
 		return glm::tvec4<T, P>(v.z, v.w, v.x, v.z);
 	}
 	}
 
 
 	// zwxw
 	// zwxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.x, v.w);
 		return glm::tvec4<T, P>(v.z, v.w, v.x, v.w);
 	}
 	}
 
 
 	// zwyx
 	// zwyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.y, v.x);
 		return glm::tvec4<T, P>(v.z, v.w, v.y, v.x);
 	}
 	}
 
 
 	// zwyy
 	// zwyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.y, v.y);
 		return glm::tvec4<T, P>(v.z, v.w, v.y, v.y);
 	}
 	}
 
 
 	// zwyz
 	// zwyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.y, v.z);
 		return glm::tvec4<T, P>(v.z, v.w, v.y, v.z);
 	}
 	}
 
 
 	// zwyw
 	// zwyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.y, v.w);
 		return glm::tvec4<T, P>(v.z, v.w, v.y, v.w);
 	}
 	}
 
 
 	// zwzx
 	// zwzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.z, v.x);
 		return glm::tvec4<T, P>(v.z, v.w, v.z, v.x);
 	}
 	}
 
 
 	// zwzy
 	// zwzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.z, v.y);
 		return glm::tvec4<T, P>(v.z, v.w, v.z, v.y);
 	}
 	}
 
 
 	// zwzz
 	// zwzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.z, v.z);
 		return glm::tvec4<T, P>(v.z, v.w, v.z, v.z);
 	}
 	}
 
 
 	// zwzw
 	// zwzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.z, v.w);
 		return glm::tvec4<T, P>(v.z, v.w, v.z, v.w);
 	}
 	}
 
 
 	// zwwx
 	// zwwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.w, v.x);
 		return glm::tvec4<T, P>(v.z, v.w, v.w, v.x);
 	}
 	}
 
 
 	// zwwy
 	// zwwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.w, v.y);
 		return glm::tvec4<T, P>(v.z, v.w, v.w, v.y);
 	}
 	}
 
 
 	// zwwz
 	// zwwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.w, v.z);
 		return glm::tvec4<T, P>(v.z, v.w, v.w, v.z);
 	}
 	}
 
 
 	// zwww
 	// zwww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> zwww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> zwww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.z, v.w, v.w, v.w);
 		return glm::tvec4<T, P>(v.z, v.w, v.w, v.w);
 	}
 	}
 
 
 	// wxxx
 	// wxxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.x, v.x);
 		return glm::tvec4<T, P>(v.w, v.x, v.x, v.x);
 	}
 	}
 
 
 	// wxxy
 	// wxxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.x, v.y);
 		return glm::tvec4<T, P>(v.w, v.x, v.x, v.y);
 	}
 	}
 
 
 	// wxxz
 	// wxxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.x, v.z);
 		return glm::tvec4<T, P>(v.w, v.x, v.x, v.z);
 	}
 	}
 
 
 	// wxxw
 	// wxxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.x, v.w);
 		return glm::tvec4<T, P>(v.w, v.x, v.x, v.w);
 	}
 	}
 
 
 	// wxyx
 	// wxyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.y, v.x);
 		return glm::tvec4<T, P>(v.w, v.x, v.y, v.x);
 	}
 	}
 
 
 	// wxyy
 	// wxyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.y, v.y);
 		return glm::tvec4<T, P>(v.w, v.x, v.y, v.y);
 	}
 	}
 
 
 	// wxyz
 	// wxyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.y, v.z);
 		return glm::tvec4<T, P>(v.w, v.x, v.y, v.z);
 	}
 	}
 
 
 	// wxyw
 	// wxyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.y, v.w);
 		return glm::tvec4<T, P>(v.w, v.x, v.y, v.w);
 	}
 	}
 
 
 	// wxzx
 	// wxzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.z, v.x);
 		return glm::tvec4<T, P>(v.w, v.x, v.z, v.x);
 	}
 	}
 
 
 	// wxzy
 	// wxzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.z, v.y);
 		return glm::tvec4<T, P>(v.w, v.x, v.z, v.y);
 	}
 	}
 
 
 	// wxzz
 	// wxzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.z, v.z);
 		return glm::tvec4<T, P>(v.w, v.x, v.z, v.z);
 	}
 	}
 
 
 	// wxzw
 	// wxzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.z, v.w);
 		return glm::tvec4<T, P>(v.w, v.x, v.z, v.w);
 	}
 	}
 
 
 	// wxwx
 	// wxwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.w, v.x);
 		return glm::tvec4<T, P>(v.w, v.x, v.w, v.x);
 	}
 	}
 
 
 	// wxwy
 	// wxwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.w, v.y);
 		return glm::tvec4<T, P>(v.w, v.x, v.w, v.y);
 	}
 	}
 
 
 	// wxwz
 	// wxwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.w, v.z);
 		return glm::tvec4<T, P>(v.w, v.x, v.w, v.z);
 	}
 	}
 
 
 	// wxww
 	// wxww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wxww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wxww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.x, v.w, v.w);
 		return glm::tvec4<T, P>(v.w, v.x, v.w, v.w);
 	}
 	}
 
 
 	// wyxx
 	// wyxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.x, v.x);
 		return glm::tvec4<T, P>(v.w, v.y, v.x, v.x);
 	}
 	}
 
 
 	// wyxy
 	// wyxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.x, v.y);
 		return glm::tvec4<T, P>(v.w, v.y, v.x, v.y);
 	}
 	}
 
 
 	// wyxz
 	// wyxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.x, v.z);
 		return glm::tvec4<T, P>(v.w, v.y, v.x, v.z);
 	}
 	}
 
 
 	// wyxw
 	// wyxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.x, v.w);
 		return glm::tvec4<T, P>(v.w, v.y, v.x, v.w);
 	}
 	}
 
 
 	// wyyx
 	// wyyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.y, v.x);
 		return glm::tvec4<T, P>(v.w, v.y, v.y, v.x);
 	}
 	}
 
 
 	// wyyy
 	// wyyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.y, v.y);
 		return glm::tvec4<T, P>(v.w, v.y, v.y, v.y);
 	}
 	}
 
 
 	// wyyz
 	// wyyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.y, v.z);
 		return glm::tvec4<T, P>(v.w, v.y, v.y, v.z);
 	}
 	}
 
 
 	// wyyw
 	// wyyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.y, v.w);
 		return glm::tvec4<T, P>(v.w, v.y, v.y, v.w);
 	}
 	}
 
 
 	// wyzx
 	// wyzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.z, v.x);
 		return glm::tvec4<T, P>(v.w, v.y, v.z, v.x);
 	}
 	}
 
 
 	// wyzy
 	// wyzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.z, v.y);
 		return glm::tvec4<T, P>(v.w, v.y, v.z, v.y);
 	}
 	}
 
 
 	// wyzz
 	// wyzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.z, v.z);
 		return glm::tvec4<T, P>(v.w, v.y, v.z, v.z);
 	}
 	}
 
 
 	// wyzw
 	// wyzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.z, v.w);
 		return glm::tvec4<T, P>(v.w, v.y, v.z, v.w);
 	}
 	}
 
 
 	// wywx
 	// wywx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wywx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wywx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.w, v.x);
 		return glm::tvec4<T, P>(v.w, v.y, v.w, v.x);
 	}
 	}
 
 
 	// wywy
 	// wywy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wywy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wywy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.w, v.y);
 		return glm::tvec4<T, P>(v.w, v.y, v.w, v.y);
 	}
 	}
 
 
 	// wywz
 	// wywz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wywz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wywz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.w, v.z);
 		return glm::tvec4<T, P>(v.w, v.y, v.w, v.z);
 	}
 	}
 
 
 	// wyww
 	// wyww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wyww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wyww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.y, v.w, v.w);
 		return glm::tvec4<T, P>(v.w, v.y, v.w, v.w);
 	}
 	}
 
 
 	// wzxx
 	// wzxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.x, v.x);
 		return glm::tvec4<T, P>(v.w, v.z, v.x, v.x);
 	}
 	}
 
 
 	// wzxy
 	// wzxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.x, v.y);
 		return glm::tvec4<T, P>(v.w, v.z, v.x, v.y);
 	}
 	}
 
 
 	// wzxz
 	// wzxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.x, v.z);
 		return glm::tvec4<T, P>(v.w, v.z, v.x, v.z);
 	}
 	}
 
 
 	// wzxw
 	// wzxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.x, v.w);
 		return glm::tvec4<T, P>(v.w, v.z, v.x, v.w);
 	}
 	}
 
 
 	// wzyx
 	// wzyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.y, v.x);
 		return glm::tvec4<T, P>(v.w, v.z, v.y, v.x);
 	}
 	}
 
 
 	// wzyy
 	// wzyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.y, v.y);
 		return glm::tvec4<T, P>(v.w, v.z, v.y, v.y);
 	}
 	}
 
 
 	// wzyz
 	// wzyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.y, v.z);
 		return glm::tvec4<T, P>(v.w, v.z, v.y, v.z);
 	}
 	}
 
 
 	// wzyw
 	// wzyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.y, v.w);
 		return glm::tvec4<T, P>(v.w, v.z, v.y, v.w);
 	}
 	}
 
 
 	// wzzx
 	// wzzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.z, v.x);
 		return glm::tvec4<T, P>(v.w, v.z, v.z, v.x);
 	}
 	}
 
 
 	// wzzy
 	// wzzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.z, v.y);
 		return glm::tvec4<T, P>(v.w, v.z, v.z, v.y);
 	}
 	}
 
 
 	// wzzz
 	// wzzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.z, v.z);
 		return glm::tvec4<T, P>(v.w, v.z, v.z, v.z);
 	}
 	}
 
 
 	// wzzw
 	// wzzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.z, v.w);
 		return glm::tvec4<T, P>(v.w, v.z, v.z, v.w);
 	}
 	}
 
 
 	// wzwx
 	// wzwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.w, v.x);
 		return glm::tvec4<T, P>(v.w, v.z, v.w, v.x);
 	}
 	}
 
 
 	// wzwy
 	// wzwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.w, v.y);
 		return glm::tvec4<T, P>(v.w, v.z, v.w, v.y);
 	}
 	}
 
 
 	// wzwz
 	// wzwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.w, v.z);
 		return glm::tvec4<T, P>(v.w, v.z, v.w, v.z);
 	}
 	}
 
 
 	// wzww
 	// wzww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wzww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wzww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.z, v.w, v.w);
 		return glm::tvec4<T, P>(v.w, v.z, v.w, v.w);
 	}
 	}
 
 
 	// wwxx
 	// wwxx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwxx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwxx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.x, v.x);
 		return glm::tvec4<T, P>(v.w, v.w, v.x, v.x);
 	}
 	}
 
 
 	// wwxy
 	// wwxy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwxy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwxy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.x, v.y);
 		return glm::tvec4<T, P>(v.w, v.w, v.x, v.y);
 	}
 	}
 
 
 	// wwxz
 	// wwxz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwxz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwxz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.x, v.z);
 		return glm::tvec4<T, P>(v.w, v.w, v.x, v.z);
 	}
 	}
 
 
 	// wwxw
 	// wwxw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwxw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwxw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.x, v.w);
 		return glm::tvec4<T, P>(v.w, v.w, v.x, v.w);
 	}
 	}
 
 
 	// wwyx
 	// wwyx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwyx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwyx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.y, v.x);
 		return glm::tvec4<T, P>(v.w, v.w, v.y, v.x);
 	}
 	}
 
 
 	// wwyy
 	// wwyy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwyy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwyy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.y, v.y);
 		return glm::tvec4<T, P>(v.w, v.w, v.y, v.y);
 	}
 	}
 
 
 	// wwyz
 	// wwyz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwyz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwyz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.y, v.z);
 		return glm::tvec4<T, P>(v.w, v.w, v.y, v.z);
 	}
 	}
 
 
 	// wwyw
 	// wwyw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwyw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwyw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.y, v.w);
 		return glm::tvec4<T, P>(v.w, v.w, v.y, v.w);
 	}
 	}
 
 
 	// wwzx
 	// wwzx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwzx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwzx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.z, v.x);
 		return glm::tvec4<T, P>(v.w, v.w, v.z, v.x);
 	}
 	}
 
 
 	// wwzy
 	// wwzy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwzy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwzy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.z, v.y);
 		return glm::tvec4<T, P>(v.w, v.w, v.z, v.y);
 	}
 	}
 
 
 	// wwzz
 	// wwzz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwzz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwzz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.z, v.z);
 		return glm::tvec4<T, P>(v.w, v.w, v.z, v.z);
 	}
 	}
 
 
 	// wwzw
 	// wwzw
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwzw(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwzw(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.z, v.w);
 		return glm::tvec4<T, P>(v.w, v.w, v.z, v.w);
 	}
 	}
 
 
 	// wwwx
 	// wwwx
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwwx(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwwx(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.w, v.x);
 		return glm::tvec4<T, P>(v.w, v.w, v.w, v.x);
 	}
 	}
 
 
 	// wwwy
 	// wwwy
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwwy(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwwy(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.w, v.y);
 		return glm::tvec4<T, P>(v.w, v.w, v.w, v.y);
 	}
 	}
 
 
 	// wwwz
 	// wwwz
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwwz(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwwz(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.w, v.z);
 		return glm::tvec4<T, P>(v.w, v.w, v.w, v.z);
 	}
 	}
 
 
 	// wwww
 	// wwww
-	template<class T, precision P = defaultp>
+	template<typename T, precision P>
 	GLM_INLINE glm::tvec4<T, P> wwww(const glm::tvec4<T, P> &v) {
 	GLM_INLINE glm::tvec4<T, P> wwww(const glm::tvec4<T, P> &v) {
 		return glm::tvec4<T, P>(v.w, v.w, v.w, v.w);
 		return glm::tvec4<T, P>(v.w, v.w, v.w, v.w);
 	}
 	}