1 /// @ref gtx_vec_swizzle
2 /// @file glm/gtx/vec_swizzle.hpp
3 ///
4 /// @see core (dependence)
5 ///
6 /// @defgroup gtx_vec_swizzle GLM_GTX_vec_swizzle
7 /// @ingroup gtx
8 ///
9 /// Include <glm/gtx/vec_swizzle.hpp> to use the features of this extension.
10 ///
11 /// Functions to perform swizzle operation.
12 
13 #pragma once
14 
15 #include "../glm.hpp"
16 
17 #ifndef GLM_ENABLE_EXPERIMENTAL
18 #	error "GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
19 #endif
20 
21 namespace glm {
22 	// xx
23 	template<typename T, qualifier Q>
xx(const glm::vec<1,T,Q> & v)24 	GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) {
25 		return glm::vec<2, T, Q>(v.x, v.x);
26 	}
27 
28 	template<typename T, qualifier Q>
xx(const glm::vec<2,T,Q> & v)29 	GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) {
30 		return glm::vec<2, T, Q>(v.x, v.x);
31 	}
32 
33 	template<typename T, qualifier Q>
xx(const glm::vec<3,T,Q> & v)34 	GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) {
35 		return glm::vec<2, T, Q>(v.x, v.x);
36 	}
37 
38 	template<typename T, qualifier Q>
xx(const glm::vec<4,T,Q> & v)39 	GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) {
40 		return glm::vec<2, T, Q>(v.x, v.x);
41 	}
42 
43 	// xy
44 	template<typename T, qualifier Q>
xy(const glm::vec<2,T,Q> & v)45 	GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) {
46 		return glm::vec<2, T, Q>(v.x, v.y);
47 	}
48 
49 	template<typename T, qualifier Q>
xy(const glm::vec<3,T,Q> & v)50 	GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) {
51 		return glm::vec<2, T, Q>(v.x, v.y);
52 	}
53 
54 	template<typename T, qualifier Q>
xy(const glm::vec<4,T,Q> & v)55 	GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) {
56 		return glm::vec<2, T, Q>(v.x, v.y);
57 	}
58 
59 	// xz
60 	template<typename T, qualifier Q>
xz(const glm::vec<3,T,Q> & v)61 	GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) {
62 		return glm::vec<2, T, Q>(v.x, v.z);
63 	}
64 
65 	template<typename T, qualifier Q>
xz(const glm::vec<4,T,Q> & v)66 	GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) {
67 		return glm::vec<2, T, Q>(v.x, v.z);
68 	}
69 
70 	// xw
71 	template<typename T, qualifier Q>
xw(const glm::vec<4,T,Q> & v)72 	GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) {
73 		return glm::vec<2, T, Q>(v.x, v.w);
74 	}
75 
76 	// yx
77 	template<typename T, qualifier Q>
yx(const glm::vec<2,T,Q> & v)78 	GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) {
79 		return glm::vec<2, T, Q>(v.y, v.x);
80 	}
81 
82 	template<typename T, qualifier Q>
yx(const glm::vec<3,T,Q> & v)83 	GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) {
84 		return glm::vec<2, T, Q>(v.y, v.x);
85 	}
86 
87 	template<typename T, qualifier Q>
yx(const glm::vec<4,T,Q> & v)88 	GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) {
89 		return glm::vec<2, T, Q>(v.y, v.x);
90 	}
91 
92 	// yy
93 	template<typename T, qualifier Q>
yy(const glm::vec<2,T,Q> & v)94 	GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) {
95 		return glm::vec<2, T, Q>(v.y, v.y);
96 	}
97 
98 	template<typename T, qualifier Q>
yy(const glm::vec<3,T,Q> & v)99 	GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) {
100 		return glm::vec<2, T, Q>(v.y, v.y);
101 	}
102 
103 	template<typename T, qualifier Q>
yy(const glm::vec<4,T,Q> & v)104 	GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) {
105 		return glm::vec<2, T, Q>(v.y, v.y);
106 	}
107 
108 	// yz
109 	template<typename T, qualifier Q>
yz(const glm::vec<3,T,Q> & v)110 	GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) {
111 		return glm::vec<2, T, Q>(v.y, v.z);
112 	}
113 
114 	template<typename T, qualifier Q>
yz(const glm::vec<4,T,Q> & v)115 	GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) {
116 		return glm::vec<2, T, Q>(v.y, v.z);
117 	}
118 
119 	// yw
120 	template<typename T, qualifier Q>
yw(const glm::vec<4,T,Q> & v)121 	GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) {
122 		return glm::vec<2, T, Q>(v.y, v.w);
123 	}
124 
125 	// zx
126 	template<typename T, qualifier Q>
zx(const glm::vec<3,T,Q> & v)127 	GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) {
128 		return glm::vec<2, T, Q>(v.z, v.x);
129 	}
130 
131 	template<typename T, qualifier Q>
zx(const glm::vec<4,T,Q> & v)132 	GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) {
133 		return glm::vec<2, T, Q>(v.z, v.x);
134 	}
135 
136 	// zy
137 	template<typename T, qualifier Q>
zy(const glm::vec<3,T,Q> & v)138 	GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) {
139 		return glm::vec<2, T, Q>(v.z, v.y);
140 	}
141 
142 	template<typename T, qualifier Q>
zy(const glm::vec<4,T,Q> & v)143 	GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) {
144 		return glm::vec<2, T, Q>(v.z, v.y);
145 	}
146 
147 	// zz
148 	template<typename T, qualifier Q>
zz(const glm::vec<3,T,Q> & v)149 	GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) {
150 		return glm::vec<2, T, Q>(v.z, v.z);
151 	}
152 
153 	template<typename T, qualifier Q>
zz(const glm::vec<4,T,Q> & v)154 	GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) {
155 		return glm::vec<2, T, Q>(v.z, v.z);
156 	}
157 
158 	// zw
159 	template<typename T, qualifier Q>
zw(const glm::vec<4,T,Q> & v)160 	GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) {
161 		return glm::vec<2, T, Q>(v.z, v.w);
162 	}
163 
164 	// wx
165 	template<typename T, qualifier Q>
wx(const glm::vec<4,T,Q> & v)166 	GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) {
167 		return glm::vec<2, T, Q>(v.w, v.x);
168 	}
169 
170 	// wy
171 	template<typename T, qualifier Q>
wy(const glm::vec<4,T,Q> & v)172 	GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) {
173 		return glm::vec<2, T, Q>(v.w, v.y);
174 	}
175 
176 	// wz
177 	template<typename T, qualifier Q>
wz(const glm::vec<4,T,Q> & v)178 	GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) {
179 		return glm::vec<2, T, Q>(v.w, v.z);
180 	}
181 
182 	// ww
183 	template<typename T, qualifier Q>
ww(const glm::vec<4,T,Q> & v)184 	GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) {
185 		return glm::vec<2, T, Q>(v.w, v.w);
186 	}
187 
188 	// xxx
189 	template<typename T, qualifier Q>
xxx(const glm::vec<1,T,Q> & v)190 	GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) {
191 		return glm::vec<3, T, Q>(v.x, v.x, v.x);
192 	}
193 
194 	template<typename T, qualifier Q>
xxx(const glm::vec<2,T,Q> & v)195 	GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) {
196 		return glm::vec<3, T, Q>(v.x, v.x, v.x);
197 	}
198 
199 	template<typename T, qualifier Q>
xxx(const glm::vec<3,T,Q> & v)200 	GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) {
201 		return glm::vec<3, T, Q>(v.x, v.x, v.x);
202 	}
203 
204 	template<typename T, qualifier Q>
xxx(const glm::vec<4,T,Q> & v)205 	GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) {
206 		return glm::vec<3, T, Q>(v.x, v.x, v.x);
207 	}
208 
209 	// xxy
210 	template<typename T, qualifier Q>
xxy(const glm::vec<2,T,Q> & v)211 	GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) {
212 		return glm::vec<3, T, Q>(v.x, v.x, v.y);
213 	}
214 
215 	template<typename T, qualifier Q>
xxy(const glm::vec<3,T,Q> & v)216 	GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) {
217 		return glm::vec<3, T, Q>(v.x, v.x, v.y);
218 	}
219 
220 	template<typename T, qualifier Q>
xxy(const glm::vec<4,T,Q> & v)221 	GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) {
222 		return glm::vec<3, T, Q>(v.x, v.x, v.y);
223 	}
224 
225 	// xxz
226 	template<typename T, qualifier Q>
xxz(const glm::vec<3,T,Q> & v)227 	GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) {
228 		return glm::vec<3, T, Q>(v.x, v.x, v.z);
229 	}
230 
231 	template<typename T, qualifier Q>
xxz(const glm::vec<4,T,Q> & v)232 	GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) {
233 		return glm::vec<3, T, Q>(v.x, v.x, v.z);
234 	}
235 
236 	// xxw
237 	template<typename T, qualifier Q>
xxw(const glm::vec<4,T,Q> & v)238 	GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) {
239 		return glm::vec<3, T, Q>(v.x, v.x, v.w);
240 	}
241 
242 	// xyx
243 	template<typename T, qualifier Q>
xyx(const glm::vec<2,T,Q> & v)244 	GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) {
245 		return glm::vec<3, T, Q>(v.x, v.y, v.x);
246 	}
247 
248 	template<typename T, qualifier Q>
xyx(const glm::vec<3,T,Q> & v)249 	GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) {
250 		return glm::vec<3, T, Q>(v.x, v.y, v.x);
251 	}
252 
253 	template<typename T, qualifier Q>
xyx(const glm::vec<4,T,Q> & v)254 	GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) {
255 		return glm::vec<3, T, Q>(v.x, v.y, v.x);
256 	}
257 
258 	// xyy
259 	template<typename T, qualifier Q>
xyy(const glm::vec<2,T,Q> & v)260 	GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) {
261 		return glm::vec<3, T, Q>(v.x, v.y, v.y);
262 	}
263 
264 	template<typename T, qualifier Q>
xyy(const glm::vec<3,T,Q> & v)265 	GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) {
266 		return glm::vec<3, T, Q>(v.x, v.y, v.y);
267 	}
268 
269 	template<typename T, qualifier Q>
xyy(const glm::vec<4,T,Q> & v)270 	GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) {
271 		return glm::vec<3, T, Q>(v.x, v.y, v.y);
272 	}
273 
274 	// xyz
275 	template<typename T, qualifier Q>
xyz(const glm::vec<3,T,Q> & v)276 	GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) {
277 		return glm::vec<3, T, Q>(v.x, v.y, v.z);
278 	}
279 
280 	template<typename T, qualifier Q>
xyz(const glm::vec<4,T,Q> & v)281 	GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) {
282 		return glm::vec<3, T, Q>(v.x, v.y, v.z);
283 	}
284 
285 	// xyw
286 	template<typename T, qualifier Q>
xyw(const glm::vec<4,T,Q> & v)287 	GLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) {
288 		return glm::vec<3, T, Q>(v.x, v.y, v.w);
289 	}
290 
291 	// xzx
292 	template<typename T, qualifier Q>
xzx(const glm::vec<3,T,Q> & v)293 	GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) {
294 		return glm::vec<3, T, Q>(v.x, v.z, v.x);
295 	}
296 
297 	template<typename T, qualifier Q>
xzx(const glm::vec<4,T,Q> & v)298 	GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) {
299 		return glm::vec<3, T, Q>(v.x, v.z, v.x);
300 	}
301 
302 	// xzy
303 	template<typename T, qualifier Q>
xzy(const glm::vec<3,T,Q> & v)304 	GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) {
305 		return glm::vec<3, T, Q>(v.x, v.z, v.y);
306 	}
307 
308 	template<typename T, qualifier Q>
xzy(const glm::vec<4,T,Q> & v)309 	GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) {
310 		return glm::vec<3, T, Q>(v.x, v.z, v.y);
311 	}
312 
313 	// xzz
314 	template<typename T, qualifier Q>
xzz(const glm::vec<3,T,Q> & v)315 	GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) {
316 		return glm::vec<3, T, Q>(v.x, v.z, v.z);
317 	}
318 
319 	template<typename T, qualifier Q>
xzz(const glm::vec<4,T,Q> & v)320 	GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) {
321 		return glm::vec<3, T, Q>(v.x, v.z, v.z);
322 	}
323 
324 	// xzw
325 	template<typename T, qualifier Q>
xzw(const glm::vec<4,T,Q> & v)326 	GLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) {
327 		return glm::vec<3, T, Q>(v.x, v.z, v.w);
328 	}
329 
330 	// xwx
331 	template<typename T, qualifier Q>
xwx(const glm::vec<4,T,Q> & v)332 	GLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) {
333 		return glm::vec<3, T, Q>(v.x, v.w, v.x);
334 	}
335 
336 	// xwy
337 	template<typename T, qualifier Q>
xwy(const glm::vec<4,T,Q> & v)338 	GLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) {
339 		return glm::vec<3, T, Q>(v.x, v.w, v.y);
340 	}
341 
342 	// xwz
343 	template<typename T, qualifier Q>
xwz(const glm::vec<4,T,Q> & v)344 	GLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) {
345 		return glm::vec<3, T, Q>(v.x, v.w, v.z);
346 	}
347 
348 	// xww
349 	template<typename T, qualifier Q>
xww(const glm::vec<4,T,Q> & v)350 	GLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) {
351 		return glm::vec<3, T, Q>(v.x, v.w, v.w);
352 	}
353 
354 	// yxx
355 	template<typename T, qualifier Q>
yxx(const glm::vec<2,T,Q> & v)356 	GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) {
357 		return glm::vec<3, T, Q>(v.y, v.x, v.x);
358 	}
359 
360 	template<typename T, qualifier Q>
yxx(const glm::vec<3,T,Q> & v)361 	GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) {
362 		return glm::vec<3, T, Q>(v.y, v.x, v.x);
363 	}
364 
365 	template<typename T, qualifier Q>
yxx(const glm::vec<4,T,Q> & v)366 	GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) {
367 		return glm::vec<3, T, Q>(v.y, v.x, v.x);
368 	}
369 
370 	// yxy
371 	template<typename T, qualifier Q>
yxy(const glm::vec<2,T,Q> & v)372 	GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) {
373 		return glm::vec<3, T, Q>(v.y, v.x, v.y);
374 	}
375 
376 	template<typename T, qualifier Q>
yxy(const glm::vec<3,T,Q> & v)377 	GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) {
378 		return glm::vec<3, T, Q>(v.y, v.x, v.y);
379 	}
380 
381 	template<typename T, qualifier Q>
yxy(const glm::vec<4,T,Q> & v)382 	GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) {
383 		return glm::vec<3, T, Q>(v.y, v.x, v.y);
384 	}
385 
386 	// yxz
387 	template<typename T, qualifier Q>
yxz(const glm::vec<3,T,Q> & v)388 	GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) {
389 		return glm::vec<3, T, Q>(v.y, v.x, v.z);
390 	}
391 
392 	template<typename T, qualifier Q>
yxz(const glm::vec<4,T,Q> & v)393 	GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) {
394 		return glm::vec<3, T, Q>(v.y, v.x, v.z);
395 	}
396 
397 	// yxw
398 	template<typename T, qualifier Q>
yxw(const glm::vec<4,T,Q> & v)399 	GLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) {
400 		return glm::vec<3, T, Q>(v.y, v.x, v.w);
401 	}
402 
403 	// yyx
404 	template<typename T, qualifier Q>
yyx(const glm::vec<2,T,Q> & v)405 	GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) {
406 		return glm::vec<3, T, Q>(v.y, v.y, v.x);
407 	}
408 
409 	template<typename T, qualifier Q>
yyx(const glm::vec<3,T,Q> & v)410 	GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) {
411 		return glm::vec<3, T, Q>(v.y, v.y, v.x);
412 	}
413 
414 	template<typename T, qualifier Q>
yyx(const glm::vec<4,T,Q> & v)415 	GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) {
416 		return glm::vec<3, T, Q>(v.y, v.y, v.x);
417 	}
418 
419 	// yyy
420 	template<typename T, qualifier Q>
yyy(const glm::vec<2,T,Q> & v)421 	GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) {
422 		return glm::vec<3, T, Q>(v.y, v.y, v.y);
423 	}
424 
425 	template<typename T, qualifier Q>
yyy(const glm::vec<3,T,Q> & v)426 	GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) {
427 		return glm::vec<3, T, Q>(v.y, v.y, v.y);
428 	}
429 
430 	template<typename T, qualifier Q>
yyy(const glm::vec<4,T,Q> & v)431 	GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) {
432 		return glm::vec<3, T, Q>(v.y, v.y, v.y);
433 	}
434 
435 	// yyz
436 	template<typename T, qualifier Q>
yyz(const glm::vec<3,T,Q> & v)437 	GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) {
438 		return glm::vec<3, T, Q>(v.y, v.y, v.z);
439 	}
440 
441 	template<typename T, qualifier Q>
yyz(const glm::vec<4,T,Q> & v)442 	GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) {
443 		return glm::vec<3, T, Q>(v.y, v.y, v.z);
444 	}
445 
446 	// yyw
447 	template<typename T, qualifier Q>
yyw(const glm::vec<4,T,Q> & v)448 	GLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) {
449 		return glm::vec<3, T, Q>(v.y, v.y, v.w);
450 	}
451 
452 	// yzx
453 	template<typename T, qualifier Q>
yzx(const glm::vec<3,T,Q> & v)454 	GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) {
455 		return glm::vec<3, T, Q>(v.y, v.z, v.x);
456 	}
457 
458 	template<typename T, qualifier Q>
yzx(const glm::vec<4,T,Q> & v)459 	GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) {
460 		return glm::vec<3, T, Q>(v.y, v.z, v.x);
461 	}
462 
463 	// yzy
464 	template<typename T, qualifier Q>
yzy(const glm::vec<3,T,Q> & v)465 	GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) {
466 		return glm::vec<3, T, Q>(v.y, v.z, v.y);
467 	}
468 
469 	template<typename T, qualifier Q>
yzy(const glm::vec<4,T,Q> & v)470 	GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) {
471 		return glm::vec<3, T, Q>(v.y, v.z, v.y);
472 	}
473 
474 	// yzz
475 	template<typename T, qualifier Q>
yzz(const glm::vec<3,T,Q> & v)476 	GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) {
477 		return glm::vec<3, T, Q>(v.y, v.z, v.z);
478 	}
479 
480 	template<typename T, qualifier Q>
yzz(const glm::vec<4,T,Q> & v)481 	GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) {
482 		return glm::vec<3, T, Q>(v.y, v.z, v.z);
483 	}
484 
485 	// yzw
486 	template<typename T, qualifier Q>
yzw(const glm::vec<4,T,Q> & v)487 	GLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) {
488 		return glm::vec<3, T, Q>(v.y, v.z, v.w);
489 	}
490 
491 	// ywx
492 	template<typename T, qualifier Q>
ywx(const glm::vec<4,T,Q> & v)493 	GLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) {
494 		return glm::vec<3, T, Q>(v.y, v.w, v.x);
495 	}
496 
497 	// ywy
498 	template<typename T, qualifier Q>
ywy(const glm::vec<4,T,Q> & v)499 	GLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) {
500 		return glm::vec<3, T, Q>(v.y, v.w, v.y);
501 	}
502 
503 	// ywz
504 	template<typename T, qualifier Q>
ywz(const glm::vec<4,T,Q> & v)505 	GLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) {
506 		return glm::vec<3, T, Q>(v.y, v.w, v.z);
507 	}
508 
509 	// yww
510 	template<typename T, qualifier Q>
yww(const glm::vec<4,T,Q> & v)511 	GLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) {
512 		return glm::vec<3, T, Q>(v.y, v.w, v.w);
513 	}
514 
515 	// zxx
516 	template<typename T, qualifier Q>
zxx(const glm::vec<3,T,Q> & v)517 	GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) {
518 		return glm::vec<3, T, Q>(v.z, v.x, v.x);
519 	}
520 
521 	template<typename T, qualifier Q>
zxx(const glm::vec<4,T,Q> & v)522 	GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) {
523 		return glm::vec<3, T, Q>(v.z, v.x, v.x);
524 	}
525 
526 	// zxy
527 	template<typename T, qualifier Q>
zxy(const glm::vec<3,T,Q> & v)528 	GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) {
529 		return glm::vec<3, T, Q>(v.z, v.x, v.y);
530 	}
531 
532 	template<typename T, qualifier Q>
zxy(const glm::vec<4,T,Q> & v)533 	GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) {
534 		return glm::vec<3, T, Q>(v.z, v.x, v.y);
535 	}
536 
537 	// zxz
538 	template<typename T, qualifier Q>
zxz(const glm::vec<3,T,Q> & v)539 	GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) {
540 		return glm::vec<3, T, Q>(v.z, v.x, v.z);
541 	}
542 
543 	template<typename T, qualifier Q>
zxz(const glm::vec<4,T,Q> & v)544 	GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) {
545 		return glm::vec<3, T, Q>(v.z, v.x, v.z);
546 	}
547 
548 	// zxw
549 	template<typename T, qualifier Q>
zxw(const glm::vec<4,T,Q> & v)550 	GLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) {
551 		return glm::vec<3, T, Q>(v.z, v.x, v.w);
552 	}
553 
554 	// zyx
555 	template<typename T, qualifier Q>
zyx(const glm::vec<3,T,Q> & v)556 	GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) {
557 		return glm::vec<3, T, Q>(v.z, v.y, v.x);
558 	}
559 
560 	template<typename T, qualifier Q>
zyx(const glm::vec<4,T,Q> & v)561 	GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) {
562 		return glm::vec<3, T, Q>(v.z, v.y, v.x);
563 	}
564 
565 	// zyy
566 	template<typename T, qualifier Q>
zyy(const glm::vec<3,T,Q> & v)567 	GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) {
568 		return glm::vec<3, T, Q>(v.z, v.y, v.y);
569 	}
570 
571 	template<typename T, qualifier Q>
zyy(const glm::vec<4,T,Q> & v)572 	GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) {
573 		return glm::vec<3, T, Q>(v.z, v.y, v.y);
574 	}
575 
576 	// zyz
577 	template<typename T, qualifier Q>
zyz(const glm::vec<3,T,Q> & v)578 	GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) {
579 		return glm::vec<3, T, Q>(v.z, v.y, v.z);
580 	}
581 
582 	template<typename T, qualifier Q>
zyz(const glm::vec<4,T,Q> & v)583 	GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) {
584 		return glm::vec<3, T, Q>(v.z, v.y, v.z);
585 	}
586 
587 	// zyw
588 	template<typename T, qualifier Q>
zyw(const glm::vec<4,T,Q> & v)589 	GLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) {
590 		return glm::vec<3, T, Q>(v.z, v.y, v.w);
591 	}
592 
593 	// zzx
594 	template<typename T, qualifier Q>
zzx(const glm::vec<3,T,Q> & v)595 	GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) {
596 		return glm::vec<3, T, Q>(v.z, v.z, v.x);
597 	}
598 
599 	template<typename T, qualifier Q>
zzx(const glm::vec<4,T,Q> & v)600 	GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) {
601 		return glm::vec<3, T, Q>(v.z, v.z, v.x);
602 	}
603 
604 	// zzy
605 	template<typename T, qualifier Q>
zzy(const glm::vec<3,T,Q> & v)606 	GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) {
607 		return glm::vec<3, T, Q>(v.z, v.z, v.y);
608 	}
609 
610 	template<typename T, qualifier Q>
zzy(const glm::vec<4,T,Q> & v)611 	GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) {
612 		return glm::vec<3, T, Q>(v.z, v.z, v.y);
613 	}
614 
615 	// zzz
616 	template<typename T, qualifier Q>
zzz(const glm::vec<3,T,Q> & v)617 	GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) {
618 		return glm::vec<3, T, Q>(v.z, v.z, v.z);
619 	}
620 
621 	template<typename T, qualifier Q>
zzz(const glm::vec<4,T,Q> & v)622 	GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) {
623 		return glm::vec<3, T, Q>(v.z, v.z, v.z);
624 	}
625 
626 	// zzw
627 	template<typename T, qualifier Q>
zzw(const glm::vec<4,T,Q> & v)628 	GLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) {
629 		return glm::vec<3, T, Q>(v.z, v.z, v.w);
630 	}
631 
632 	// zwx
633 	template<typename T, qualifier Q>
zwx(const glm::vec<4,T,Q> & v)634 	GLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) {
635 		return glm::vec<3, T, Q>(v.z, v.w, v.x);
636 	}
637 
638 	// zwy
639 	template<typename T, qualifier Q>
zwy(const glm::vec<4,T,Q> & v)640 	GLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) {
641 		return glm::vec<3, T, Q>(v.z, v.w, v.y);
642 	}
643 
644 	// zwz
645 	template<typename T, qualifier Q>
zwz(const glm::vec<4,T,Q> & v)646 	GLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) {
647 		return glm::vec<3, T, Q>(v.z, v.w, v.z);
648 	}
649 
650 	// zww
651 	template<typename T, qualifier Q>
zww(const glm::vec<4,T,Q> & v)652 	GLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) {
653 		return glm::vec<3, T, Q>(v.z, v.w, v.w);
654 	}
655 
656 	// wxx
657 	template<typename T, qualifier Q>
wxx(const glm::vec<4,T,Q> & v)658 	GLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) {
659 		return glm::vec<3, T, Q>(v.w, v.x, v.x);
660 	}
661 
662 	// wxy
663 	template<typename T, qualifier Q>
wxy(const glm::vec<4,T,Q> & v)664 	GLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) {
665 		return glm::vec<3, T, Q>(v.w, v.x, v.y);
666 	}
667 
668 	// wxz
669 	template<typename T, qualifier Q>
wxz(const glm::vec<4,T,Q> & v)670 	GLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) {
671 		return glm::vec<3, T, Q>(v.w, v.x, v.z);
672 	}
673 
674 	// wxw
675 	template<typename T, qualifier Q>
wxw(const glm::vec<4,T,Q> & v)676 	GLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) {
677 		return glm::vec<3, T, Q>(v.w, v.x, v.w);
678 	}
679 
680 	// wyx
681 	template<typename T, qualifier Q>
wyx(const glm::vec<4,T,Q> & v)682 	GLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) {
683 		return glm::vec<3, T, Q>(v.w, v.y, v.x);
684 	}
685 
686 	// wyy
687 	template<typename T, qualifier Q>
wyy(const glm::vec<4,T,Q> & v)688 	GLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) {
689 		return glm::vec<3, T, Q>(v.w, v.y, v.y);
690 	}
691 
692 	// wyz
693 	template<typename T, qualifier Q>
wyz(const glm::vec<4,T,Q> & v)694 	GLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) {
695 		return glm::vec<3, T, Q>(v.w, v.y, v.z);
696 	}
697 
698 	// wyw
699 	template<typename T, qualifier Q>
wyw(const glm::vec<4,T,Q> & v)700 	GLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) {
701 		return glm::vec<3, T, Q>(v.w, v.y, v.w);
702 	}
703 
704 	// wzx
705 	template<typename T, qualifier Q>
wzx(const glm::vec<4,T,Q> & v)706 	GLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) {
707 		return glm::vec<3, T, Q>(v.w, v.z, v.x);
708 	}
709 
710 	// wzy
711 	template<typename T, qualifier Q>
wzy(const glm::vec<4,T,Q> & v)712 	GLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) {
713 		return glm::vec<3, T, Q>(v.w, v.z, v.y);
714 	}
715 
716 	// wzz
717 	template<typename T, qualifier Q>
wzz(const glm::vec<4,T,Q> & v)718 	GLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) {
719 		return glm::vec<3, T, Q>(v.w, v.z, v.z);
720 	}
721 
722 	// wzw
723 	template<typename T, qualifier Q>
wzw(const glm::vec<4,T,Q> & v)724 	GLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) {
725 		return glm::vec<3, T, Q>(v.w, v.z, v.w);
726 	}
727 
728 	// wwx
729 	template<typename T, qualifier Q>
wwx(const glm::vec<4,T,Q> & v)730 	GLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) {
731 		return glm::vec<3, T, Q>(v.w, v.w, v.x);
732 	}
733 
734 	// wwy
735 	template<typename T, qualifier Q>
wwy(const glm::vec<4,T,Q> & v)736 	GLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) {
737 		return glm::vec<3, T, Q>(v.w, v.w, v.y);
738 	}
739 
740 	// wwz
741 	template<typename T, qualifier Q>
wwz(const glm::vec<4,T,Q> & v)742 	GLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) {
743 		return glm::vec<3, T, Q>(v.w, v.w, v.z);
744 	}
745 
746 	// www
747 	template<typename T, qualifier Q>
www(const glm::vec<4,T,Q> & v)748 	GLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) {
749 		return glm::vec<3, T, Q>(v.w, v.w, v.w);
750 	}
751 
752 	// xxxx
753 	template<typename T, qualifier Q>
xxxx(const glm::vec<1,T,Q> & v)754 	GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) {
755 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
756 	}
757 
758 	template<typename T, qualifier Q>
xxxx(const glm::vec<2,T,Q> & v)759 	GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) {
760 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
761 	}
762 
763 	template<typename T, qualifier Q>
xxxx(const glm::vec<3,T,Q> & v)764 	GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) {
765 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
766 	}
767 
768 	template<typename T, qualifier Q>
xxxx(const glm::vec<4,T,Q> & v)769 	GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) {
770 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);
771 	}
772 
773 	// xxxy
774 	template<typename T, qualifier Q>
xxxy(const glm::vec<2,T,Q> & v)775 	GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) {
776 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
777 	}
778 
779 	template<typename T, qualifier Q>
xxxy(const glm::vec<3,T,Q> & v)780 	GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) {
781 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
782 	}
783 
784 	template<typename T, qualifier Q>
xxxy(const glm::vec<4,T,Q> & v)785 	GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) {
786 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);
787 	}
788 
789 	// xxxz
790 	template<typename T, qualifier Q>
xxxz(const glm::vec<3,T,Q> & v)791 	GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) {
792 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);
793 	}
794 
795 	template<typename T, qualifier Q>
xxxz(const glm::vec<4,T,Q> & v)796 	GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) {
797 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);
798 	}
799 
800 	// xxxw
801 	template<typename T, qualifier Q>
xxxw(const glm::vec<4,T,Q> & v)802 	GLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) {
803 		return glm::vec<4, T, Q>(v.x, v.x, v.x, v.w);
804 	}
805 
806 	// xxyx
807 	template<typename T, qualifier Q>
xxyx(const glm::vec<2,T,Q> & v)808 	GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) {
809 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
810 	}
811 
812 	template<typename T, qualifier Q>
xxyx(const glm::vec<3,T,Q> & v)813 	GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) {
814 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
815 	}
816 
817 	template<typename T, qualifier Q>
xxyx(const glm::vec<4,T,Q> & v)818 	GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) {
819 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);
820 	}
821 
822 	// xxyy
823 	template<typename T, qualifier Q>
xxyy(const glm::vec<2,T,Q> & v)824 	GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) {
825 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
826 	}
827 
828 	template<typename T, qualifier Q>
xxyy(const glm::vec<3,T,Q> & v)829 	GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) {
830 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
831 	}
832 
833 	template<typename T, qualifier Q>
xxyy(const glm::vec<4,T,Q> & v)834 	GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) {
835 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);
836 	}
837 
838 	// xxyz
839 	template<typename T, qualifier Q>
xxyz(const glm::vec<3,T,Q> & v)840 	GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) {
841 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);
842 	}
843 
844 	template<typename T, qualifier Q>
xxyz(const glm::vec<4,T,Q> & v)845 	GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) {
846 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);
847 	}
848 
849 	// xxyw
850 	template<typename T, qualifier Q>
xxyw(const glm::vec<4,T,Q> & v)851 	GLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) {
852 		return glm::vec<4, T, Q>(v.x, v.x, v.y, v.w);
853 	}
854 
855 	// xxzx
856 	template<typename T, qualifier Q>
xxzx(const glm::vec<3,T,Q> & v)857 	GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) {
858 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);
859 	}
860 
861 	template<typename T, qualifier Q>
xxzx(const glm::vec<4,T,Q> & v)862 	GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) {
863 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);
864 	}
865 
866 	// xxzy
867 	template<typename T, qualifier Q>
xxzy(const glm::vec<3,T,Q> & v)868 	GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) {
869 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);
870 	}
871 
872 	template<typename T, qualifier Q>
xxzy(const glm::vec<4,T,Q> & v)873 	GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) {
874 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);
875 	}
876 
877 	// xxzz
878 	template<typename T, qualifier Q>
xxzz(const glm::vec<3,T,Q> & v)879 	GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) {
880 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);
881 	}
882 
883 	template<typename T, qualifier Q>
xxzz(const glm::vec<4,T,Q> & v)884 	GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) {
885 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);
886 	}
887 
888 	// xxzw
889 	template<typename T, qualifier Q>
xxzw(const glm::vec<4,T,Q> & v)890 	GLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) {
891 		return glm::vec<4, T, Q>(v.x, v.x, v.z, v.w);
892 	}
893 
894 	// xxwx
895 	template<typename T, qualifier Q>
xxwx(const glm::vec<4,T,Q> & v)896 	GLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) {
897 		return glm::vec<4, T, Q>(v.x, v.x, v.w, v.x);
898 	}
899 
900 	// xxwy
901 	template<typename T, qualifier Q>
xxwy(const glm::vec<4,T,Q> & v)902 	GLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) {
903 		return glm::vec<4, T, Q>(v.x, v.x, v.w, v.y);
904 	}
905 
906 	// xxwz
907 	template<typename T, qualifier Q>
xxwz(const glm::vec<4,T,Q> & v)908 	GLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) {
909 		return glm::vec<4, T, Q>(v.x, v.x, v.w, v.z);
910 	}
911 
912 	// xxww
913 	template<typename T, qualifier Q>
xxww(const glm::vec<4,T,Q> & v)914 	GLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) {
915 		return glm::vec<4, T, Q>(v.x, v.x, v.w, v.w);
916 	}
917 
918 	// xyxx
919 	template<typename T, qualifier Q>
xyxx(const glm::vec<2,T,Q> & v)920 	GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) {
921 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
922 	}
923 
924 	template<typename T, qualifier Q>
xyxx(const glm::vec<3,T,Q> & v)925 	GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) {
926 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
927 	}
928 
929 	template<typename T, qualifier Q>
xyxx(const glm::vec<4,T,Q> & v)930 	GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) {
931 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);
932 	}
933 
934 	// xyxy
935 	template<typename T, qualifier Q>
xyxy(const glm::vec<2,T,Q> & v)936 	GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) {
937 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
938 	}
939 
940 	template<typename T, qualifier Q>
xyxy(const glm::vec<3,T,Q> & v)941 	GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) {
942 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
943 	}
944 
945 	template<typename T, qualifier Q>
xyxy(const glm::vec<4,T,Q> & v)946 	GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) {
947 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);
948 	}
949 
950 	// xyxz
951 	template<typename T, qualifier Q>
xyxz(const glm::vec<3,T,Q> & v)952 	GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) {
953 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);
954 	}
955 
956 	template<typename T, qualifier Q>
xyxz(const glm::vec<4,T,Q> & v)957 	GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) {
958 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);
959 	}
960 
961 	// xyxw
962 	template<typename T, qualifier Q>
xyxw(const glm::vec<4,T,Q> & v)963 	GLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) {
964 		return glm::vec<4, T, Q>(v.x, v.y, v.x, v.w);
965 	}
966 
967 	// xyyx
968 	template<typename T, qualifier Q>
xyyx(const glm::vec<2,T,Q> & v)969 	GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) {
970 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
971 	}
972 
973 	template<typename T, qualifier Q>
xyyx(const glm::vec<3,T,Q> & v)974 	GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) {
975 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
976 	}
977 
978 	template<typename T, qualifier Q>
xyyx(const glm::vec<4,T,Q> & v)979 	GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) {
980 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);
981 	}
982 
983 	// xyyy
984 	template<typename T, qualifier Q>
xyyy(const glm::vec<2,T,Q> & v)985 	GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) {
986 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
987 	}
988 
989 	template<typename T, qualifier Q>
xyyy(const glm::vec<3,T,Q> & v)990 	GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) {
991 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
992 	}
993 
994 	template<typename T, qualifier Q>
xyyy(const glm::vec<4,T,Q> & v)995 	GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) {
996 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);
997 	}
998 
999 	// xyyz
1000 	template<typename T, qualifier Q>
xyyz(const glm::vec<3,T,Q> & v)1001 	GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) {
1002 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);
1003 	}
1004 
1005 	template<typename T, qualifier Q>
xyyz(const glm::vec<4,T,Q> & v)1006 	GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) {
1007 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);
1008 	}
1009 
1010 	// xyyw
1011 	template<typename T, qualifier Q>
xyyw(const glm::vec<4,T,Q> & v)1012 	GLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) {
1013 		return glm::vec<4, T, Q>(v.x, v.y, v.y, v.w);
1014 	}
1015 
1016 	// xyzx
1017 	template<typename T, qualifier Q>
xyzx(const glm::vec<3,T,Q> & v)1018 	GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) {
1019 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);
1020 	}
1021 
1022 	template<typename T, qualifier Q>
xyzx(const glm::vec<4,T,Q> & v)1023 	GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) {
1024 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);
1025 	}
1026 
1027 	// xyzy
1028 	template<typename T, qualifier Q>
xyzy(const glm::vec<3,T,Q> & v)1029 	GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) {
1030 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);
1031 	}
1032 
1033 	template<typename T, qualifier Q>
xyzy(const glm::vec<4,T,Q> & v)1034 	GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) {
1035 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);
1036 	}
1037 
1038 	// xyzz
1039 	template<typename T, qualifier Q>
xyzz(const glm::vec<3,T,Q> & v)1040 	GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) {
1041 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);
1042 	}
1043 
1044 	template<typename T, qualifier Q>
xyzz(const glm::vec<4,T,Q> & v)1045 	GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) {
1046 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);
1047 	}
1048 
1049 	// xyzw
1050 	template<typename T, qualifier Q>
xyzw(const glm::vec<4,T,Q> & v)1051 	GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) {
1052 		return glm::vec<4, T, Q>(v.x, v.y, v.z, v.w);
1053 	}
1054 
1055 	// xywx
1056 	template<typename T, qualifier Q>
xywx(const glm::vec<4,T,Q> & v)1057 	GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) {
1058 		return glm::vec<4, T, Q>(v.x, v.y, v.w, v.x);
1059 	}
1060 
1061 	// xywy
1062 	template<typename T, qualifier Q>
xywy(const glm::vec<4,T,Q> & v)1063 	GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) {
1064 		return glm::vec<4, T, Q>(v.x, v.y, v.w, v.y);
1065 	}
1066 
1067 	// xywz
1068 	template<typename T, qualifier Q>
xywz(const glm::vec<4,T,Q> & v)1069 	GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) {
1070 		return glm::vec<4, T, Q>(v.x, v.y, v.w, v.z);
1071 	}
1072 
1073 	// xyww
1074 	template<typename T, qualifier Q>
xyww(const glm::vec<4,T,Q> & v)1075 	GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) {
1076 		return glm::vec<4, T, Q>(v.x, v.y, v.w, v.w);
1077 	}
1078 
1079 	// xzxx
1080 	template<typename T, qualifier Q>
xzxx(const glm::vec<3,T,Q> & v)1081 	GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) {
1082 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);
1083 	}
1084 
1085 	template<typename T, qualifier Q>
xzxx(const glm::vec<4,T,Q> & v)1086 	GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) {
1087 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);
1088 	}
1089 
1090 	// xzxy
1091 	template<typename T, qualifier Q>
xzxy(const glm::vec<3,T,Q> & v)1092 	GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) {
1093 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);
1094 	}
1095 
1096 	template<typename T, qualifier Q>
xzxy(const glm::vec<4,T,Q> & v)1097 	GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) {
1098 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);
1099 	}
1100 
1101 	// xzxz
1102 	template<typename T, qualifier Q>
xzxz(const glm::vec<3,T,Q> & v)1103 	GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) {
1104 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);
1105 	}
1106 
1107 	template<typename T, qualifier Q>
xzxz(const glm::vec<4,T,Q> & v)1108 	GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) {
1109 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);
1110 	}
1111 
1112 	// xzxw
1113 	template<typename T, qualifier Q>
xzxw(const glm::vec<4,T,Q> & v)1114 	GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) {
1115 		return glm::vec<4, T, Q>(v.x, v.z, v.x, v.w);
1116 	}
1117 
1118 	// xzyx
1119 	template<typename T, qualifier Q>
xzyx(const glm::vec<3,T,Q> & v)1120 	GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) {
1121 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);
1122 	}
1123 
1124 	template<typename T, qualifier Q>
xzyx(const glm::vec<4,T,Q> & v)1125 	GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) {
1126 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);
1127 	}
1128 
1129 	// xzyy
1130 	template<typename T, qualifier Q>
xzyy(const glm::vec<3,T,Q> & v)1131 	GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) {
1132 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);
1133 	}
1134 
1135 	template<typename T, qualifier Q>
xzyy(const glm::vec<4,T,Q> & v)1136 	GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) {
1137 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);
1138 	}
1139 
1140 	// xzyz
1141 	template<typename T, qualifier Q>
xzyz(const glm::vec<3,T,Q> & v)1142 	GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) {
1143 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);
1144 	}
1145 
1146 	template<typename T, qualifier Q>
xzyz(const glm::vec<4,T,Q> & v)1147 	GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) {
1148 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);
1149 	}
1150 
1151 	// xzyw
1152 	template<typename T, qualifier Q>
xzyw(const glm::vec<4,T,Q> & v)1153 	GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) {
1154 		return glm::vec<4, T, Q>(v.x, v.z, v.y, v.w);
1155 	}
1156 
1157 	// xzzx
1158 	template<typename T, qualifier Q>
xzzx(const glm::vec<3,T,Q> & v)1159 	GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) {
1160 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);
1161 	}
1162 
1163 	template<typename T, qualifier Q>
xzzx(const glm::vec<4,T,Q> & v)1164 	GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) {
1165 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);
1166 	}
1167 
1168 	// xzzy
1169 	template<typename T, qualifier Q>
xzzy(const glm::vec<3,T,Q> & v)1170 	GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) {
1171 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);
1172 	}
1173 
1174 	template<typename T, qualifier Q>
xzzy(const glm::vec<4,T,Q> & v)1175 	GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) {
1176 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);
1177 	}
1178 
1179 	// xzzz
1180 	template<typename T, qualifier Q>
xzzz(const glm::vec<3,T,Q> & v)1181 	GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) {
1182 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);
1183 	}
1184 
1185 	template<typename T, qualifier Q>
xzzz(const glm::vec<4,T,Q> & v)1186 	GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) {
1187 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);
1188 	}
1189 
1190 	// xzzw
1191 	template<typename T, qualifier Q>
xzzw(const glm::vec<4,T,Q> & v)1192 	GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) {
1193 		return glm::vec<4, T, Q>(v.x, v.z, v.z, v.w);
1194 	}
1195 
1196 	// xzwx
1197 	template<typename T, qualifier Q>
xzwx(const glm::vec<4,T,Q> & v)1198 	GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) {
1199 		return glm::vec<4, T, Q>(v.x, v.z, v.w, v.x);
1200 	}
1201 
1202 	// xzwy
1203 	template<typename T, qualifier Q>
xzwy(const glm::vec<4,T,Q> & v)1204 	GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) {
1205 		return glm::vec<4, T, Q>(v.x, v.z, v.w, v.y);
1206 	}
1207 
1208 	// xzwz
1209 	template<typename T, qualifier Q>
xzwz(const glm::vec<4,T,Q> & v)1210 	GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) {
1211 		return glm::vec<4, T, Q>(v.x, v.z, v.w, v.z);
1212 	}
1213 
1214 	// xzww
1215 	template<typename T, qualifier Q>
xzww(const glm::vec<4,T,Q> & v)1216 	GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) {
1217 		return glm::vec<4, T, Q>(v.x, v.z, v.w, v.w);
1218 	}
1219 
1220 	// xwxx
1221 	template<typename T, qualifier Q>
xwxx(const glm::vec<4,T,Q> & v)1222 	GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) {
1223 		return glm::vec<4, T, Q>(v.x, v.w, v.x, v.x);
1224 	}
1225 
1226 	// xwxy
1227 	template<typename T, qualifier Q>
xwxy(const glm::vec<4,T,Q> & v)1228 	GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) {
1229 		return glm::vec<4, T, Q>(v.x, v.w, v.x, v.y);
1230 	}
1231 
1232 	// xwxz
1233 	template<typename T, qualifier Q>
xwxz(const glm::vec<4,T,Q> & v)1234 	GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) {
1235 		return glm::vec<4, T, Q>(v.x, v.w, v.x, v.z);
1236 	}
1237 
1238 	// xwxw
1239 	template<typename T, qualifier Q>
xwxw(const glm::vec<4,T,Q> & v)1240 	GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) {
1241 		return glm::vec<4, T, Q>(v.x, v.w, v.x, v.w);
1242 	}
1243 
1244 	// xwyx
1245 	template<typename T, qualifier Q>
xwyx(const glm::vec<4,T,Q> & v)1246 	GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) {
1247 		return glm::vec<4, T, Q>(v.x, v.w, v.y, v.x);
1248 	}
1249 
1250 	// xwyy
1251 	template<typename T, qualifier Q>
xwyy(const glm::vec<4,T,Q> & v)1252 	GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) {
1253 		return glm::vec<4, T, Q>(v.x, v.w, v.y, v.y);
1254 	}
1255 
1256 	// xwyz
1257 	template<typename T, qualifier Q>
xwyz(const glm::vec<4,T,Q> & v)1258 	GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) {
1259 		return glm::vec<4, T, Q>(v.x, v.w, v.y, v.z);
1260 	}
1261 
1262 	// xwyw
1263 	template<typename T, qualifier Q>
xwyw(const glm::vec<4,T,Q> & v)1264 	GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) {
1265 		return glm::vec<4, T, Q>(v.x, v.w, v.y, v.w);
1266 	}
1267 
1268 	// xwzx
1269 	template<typename T, qualifier Q>
xwzx(const glm::vec<4,T,Q> & v)1270 	GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) {
1271 		return glm::vec<4, T, Q>(v.x, v.w, v.z, v.x);
1272 	}
1273 
1274 	// xwzy
1275 	template<typename T, qualifier Q>
xwzy(const glm::vec<4,T,Q> & v)1276 	GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) {
1277 		return glm::vec<4, T, Q>(v.x, v.w, v.z, v.y);
1278 	}
1279 
1280 	// xwzz
1281 	template<typename T, qualifier Q>
xwzz(const glm::vec<4,T,Q> & v)1282 	GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) {
1283 		return glm::vec<4, T, Q>(v.x, v.w, v.z, v.z);
1284 	}
1285 
1286 	// xwzw
1287 	template<typename T, qualifier Q>
xwzw(const glm::vec<4,T,Q> & v)1288 	GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) {
1289 		return glm::vec<4, T, Q>(v.x, v.w, v.z, v.w);
1290 	}
1291 
1292 	// xwwx
1293 	template<typename T, qualifier Q>
xwwx(const glm::vec<4,T,Q> & v)1294 	GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) {
1295 		return glm::vec<4, T, Q>(v.x, v.w, v.w, v.x);
1296 	}
1297 
1298 	// xwwy
1299 	template<typename T, qualifier Q>
xwwy(const glm::vec<4,T,Q> & v)1300 	GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) {
1301 		return glm::vec<4, T, Q>(v.x, v.w, v.w, v.y);
1302 	}
1303 
1304 	// xwwz
1305 	template<typename T, qualifier Q>
xwwz(const glm::vec<4,T,Q> & v)1306 	GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) {
1307 		return glm::vec<4, T, Q>(v.x, v.w, v.w, v.z);
1308 	}
1309 
1310 	// xwww
1311 	template<typename T, qualifier Q>
xwww(const glm::vec<4,T,Q> & v)1312 	GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) {
1313 		return glm::vec<4, T, Q>(v.x, v.w, v.w, v.w);
1314 	}
1315 
1316 	// yxxx
1317 	template<typename T, qualifier Q>
yxxx(const glm::vec<2,T,Q> & v)1318 	GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) {
1319 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
1320 	}
1321 
1322 	template<typename T, qualifier Q>
yxxx(const glm::vec<3,T,Q> & v)1323 	GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) {
1324 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
1325 	}
1326 
1327 	template<typename T, qualifier Q>
yxxx(const glm::vec<4,T,Q> & v)1328 	GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) {
1329 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);
1330 	}
1331 
1332 	// yxxy
1333 	template<typename T, qualifier Q>
yxxy(const glm::vec<2,T,Q> & v)1334 	GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) {
1335 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
1336 	}
1337 
1338 	template<typename T, qualifier Q>
yxxy(const glm::vec<3,T,Q> & v)1339 	GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) {
1340 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
1341 	}
1342 
1343 	template<typename T, qualifier Q>
yxxy(const glm::vec<4,T,Q> & v)1344 	GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) {
1345 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);
1346 	}
1347 
1348 	// yxxz
1349 	template<typename T, qualifier Q>
yxxz(const glm::vec<3,T,Q> & v)1350 	GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) {
1351 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);
1352 	}
1353 
1354 	template<typename T, qualifier Q>
yxxz(const glm::vec<4,T,Q> & v)1355 	GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) {
1356 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);
1357 	}
1358 
1359 	// yxxw
1360 	template<typename T, qualifier Q>
yxxw(const glm::vec<4,T,Q> & v)1361 	GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) {
1362 		return glm::vec<4, T, Q>(v.y, v.x, v.x, v.w);
1363 	}
1364 
1365 	// yxyx
1366 	template<typename T, qualifier Q>
yxyx(const glm::vec<2,T,Q> & v)1367 	GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) {
1368 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
1369 	}
1370 
1371 	template<typename T, qualifier Q>
yxyx(const glm::vec<3,T,Q> & v)1372 	GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) {
1373 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
1374 	}
1375 
1376 	template<typename T, qualifier Q>
yxyx(const glm::vec<4,T,Q> & v)1377 	GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) {
1378 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);
1379 	}
1380 
1381 	// yxyy
1382 	template<typename T, qualifier Q>
yxyy(const glm::vec<2,T,Q> & v)1383 	GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) {
1384 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
1385 	}
1386 
1387 	template<typename T, qualifier Q>
yxyy(const glm::vec<3,T,Q> & v)1388 	GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) {
1389 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
1390 	}
1391 
1392 	template<typename T, qualifier Q>
yxyy(const glm::vec<4,T,Q> & v)1393 	GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) {
1394 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);
1395 	}
1396 
1397 	// yxyz
1398 	template<typename T, qualifier Q>
yxyz(const glm::vec<3,T,Q> & v)1399 	GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) {
1400 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);
1401 	}
1402 
1403 	template<typename T, qualifier Q>
yxyz(const glm::vec<4,T,Q> & v)1404 	GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) {
1405 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);
1406 	}
1407 
1408 	// yxyw
1409 	template<typename T, qualifier Q>
yxyw(const glm::vec<4,T,Q> & v)1410 	GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) {
1411 		return glm::vec<4, T, Q>(v.y, v.x, v.y, v.w);
1412 	}
1413 
1414 	// yxzx
1415 	template<typename T, qualifier Q>
yxzx(const glm::vec<3,T,Q> & v)1416 	GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) {
1417 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);
1418 	}
1419 
1420 	template<typename T, qualifier Q>
yxzx(const glm::vec<4,T,Q> & v)1421 	GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) {
1422 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);
1423 	}
1424 
1425 	// yxzy
1426 	template<typename T, qualifier Q>
yxzy(const glm::vec<3,T,Q> & v)1427 	GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) {
1428 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);
1429 	}
1430 
1431 	template<typename T, qualifier Q>
yxzy(const glm::vec<4,T,Q> & v)1432 	GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) {
1433 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);
1434 	}
1435 
1436 	// yxzz
1437 	template<typename T, qualifier Q>
yxzz(const glm::vec<3,T,Q> & v)1438 	GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) {
1439 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);
1440 	}
1441 
1442 	template<typename T, qualifier Q>
yxzz(const glm::vec<4,T,Q> & v)1443 	GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) {
1444 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);
1445 	}
1446 
1447 	// yxzw
1448 	template<typename T, qualifier Q>
yxzw(const glm::vec<4,T,Q> & v)1449 	GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) {
1450 		return glm::vec<4, T, Q>(v.y, v.x, v.z, v.w);
1451 	}
1452 
1453 	// yxwx
1454 	template<typename T, qualifier Q>
yxwx(const glm::vec<4,T,Q> & v)1455 	GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) {
1456 		return glm::vec<4, T, Q>(v.y, v.x, v.w, v.x);
1457 	}
1458 
1459 	// yxwy
1460 	template<typename T, qualifier Q>
yxwy(const glm::vec<4,T,Q> & v)1461 	GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) {
1462 		return glm::vec<4, T, Q>(v.y, v.x, v.w, v.y);
1463 	}
1464 
1465 	// yxwz
1466 	template<typename T, qualifier Q>
yxwz(const glm::vec<4,T,Q> & v)1467 	GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) {
1468 		return glm::vec<4, T, Q>(v.y, v.x, v.w, v.z);
1469 	}
1470 
1471 	// yxww
1472 	template<typename T, qualifier Q>
yxww(const glm::vec<4,T,Q> & v)1473 	GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) {
1474 		return glm::vec<4, T, Q>(v.y, v.x, v.w, v.w);
1475 	}
1476 
1477 	// yyxx
1478 	template<typename T, qualifier Q>
yyxx(const glm::vec<2,T,Q> & v)1479 	GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) {
1480 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
1481 	}
1482 
1483 	template<typename T, qualifier Q>
yyxx(const glm::vec<3,T,Q> & v)1484 	GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) {
1485 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
1486 	}
1487 
1488 	template<typename T, qualifier Q>
yyxx(const glm::vec<4,T,Q> & v)1489 	GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) {
1490 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);
1491 	}
1492 
1493 	// yyxy
1494 	template<typename T, qualifier Q>
yyxy(const glm::vec<2,T,Q> & v)1495 	GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) {
1496 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
1497 	}
1498 
1499 	template<typename T, qualifier Q>
yyxy(const glm::vec<3,T,Q> & v)1500 	GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) {
1501 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
1502 	}
1503 
1504 	template<typename T, qualifier Q>
yyxy(const glm::vec<4,T,Q> & v)1505 	GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) {
1506 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);
1507 	}
1508 
1509 	// yyxz
1510 	template<typename T, qualifier Q>
yyxz(const glm::vec<3,T,Q> & v)1511 	GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) {
1512 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);
1513 	}
1514 
1515 	template<typename T, qualifier Q>
yyxz(const glm::vec<4,T,Q> & v)1516 	GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) {
1517 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);
1518 	}
1519 
1520 	// yyxw
1521 	template<typename T, qualifier Q>
yyxw(const glm::vec<4,T,Q> & v)1522 	GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) {
1523 		return glm::vec<4, T, Q>(v.y, v.y, v.x, v.w);
1524 	}
1525 
1526 	// yyyx
1527 	template<typename T, qualifier Q>
yyyx(const glm::vec<2,T,Q> & v)1528 	GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) {
1529 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
1530 	}
1531 
1532 	template<typename T, qualifier Q>
yyyx(const glm::vec<3,T,Q> & v)1533 	GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) {
1534 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
1535 	}
1536 
1537 	template<typename T, qualifier Q>
yyyx(const glm::vec<4,T,Q> & v)1538 	GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) {
1539 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);
1540 	}
1541 
1542 	// yyyy
1543 	template<typename T, qualifier Q>
yyyy(const glm::vec<2,T,Q> & v)1544 	GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) {
1545 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
1546 	}
1547 
1548 	template<typename T, qualifier Q>
yyyy(const glm::vec<3,T,Q> & v)1549 	GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) {
1550 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
1551 	}
1552 
1553 	template<typename T, qualifier Q>
yyyy(const glm::vec<4,T,Q> & v)1554 	GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) {
1555 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);
1556 	}
1557 
1558 	// yyyz
1559 	template<typename T, qualifier Q>
yyyz(const glm::vec<3,T,Q> & v)1560 	GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) {
1561 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);
1562 	}
1563 
1564 	template<typename T, qualifier Q>
yyyz(const glm::vec<4,T,Q> & v)1565 	GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) {
1566 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);
1567 	}
1568 
1569 	// yyyw
1570 	template<typename T, qualifier Q>
yyyw(const glm::vec<4,T,Q> & v)1571 	GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) {
1572 		return glm::vec<4, T, Q>(v.y, v.y, v.y, v.w);
1573 	}
1574 
1575 	// yyzx
1576 	template<typename T, qualifier Q>
yyzx(const glm::vec<3,T,Q> & v)1577 	GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) {
1578 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);
1579 	}
1580 
1581 	template<typename T, qualifier Q>
yyzx(const glm::vec<4,T,Q> & v)1582 	GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) {
1583 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);
1584 	}
1585 
1586 	// yyzy
1587 	template<typename T, qualifier Q>
yyzy(const glm::vec<3,T,Q> & v)1588 	GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) {
1589 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);
1590 	}
1591 
1592 	template<typename T, qualifier Q>
yyzy(const glm::vec<4,T,Q> & v)1593 	GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) {
1594 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);
1595 	}
1596 
1597 	// yyzz
1598 	template<typename T, qualifier Q>
yyzz(const glm::vec<3,T,Q> & v)1599 	GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) {
1600 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);
1601 	}
1602 
1603 	template<typename T, qualifier Q>
yyzz(const glm::vec<4,T,Q> & v)1604 	GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) {
1605 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);
1606 	}
1607 
1608 	// yyzw
1609 	template<typename T, qualifier Q>
yyzw(const glm::vec<4,T,Q> & v)1610 	GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) {
1611 		return glm::vec<4, T, Q>(v.y, v.y, v.z, v.w);
1612 	}
1613 
1614 	// yywx
1615 	template<typename T, qualifier Q>
yywx(const glm::vec<4,T,Q> & v)1616 	GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) {
1617 		return glm::vec<4, T, Q>(v.y, v.y, v.w, v.x);
1618 	}
1619 
1620 	// yywy
1621 	template<typename T, qualifier Q>
yywy(const glm::vec<4,T,Q> & v)1622 	GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) {
1623 		return glm::vec<4, T, Q>(v.y, v.y, v.w, v.y);
1624 	}
1625 
1626 	// yywz
1627 	template<typename T, qualifier Q>
yywz(const glm::vec<4,T,Q> & v)1628 	GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) {
1629 		return glm::vec<4, T, Q>(v.y, v.y, v.w, v.z);
1630 	}
1631 
1632 	// yyww
1633 	template<typename T, qualifier Q>
yyww(const glm::vec<4,T,Q> & v)1634 	GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) {
1635 		return glm::vec<4, T, Q>(v.y, v.y, v.w, v.w);
1636 	}
1637 
1638 	// yzxx
1639 	template<typename T, qualifier Q>
yzxx(const glm::vec<3,T,Q> & v)1640 	GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) {
1641 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);
1642 	}
1643 
1644 	template<typename T, qualifier Q>
yzxx(const glm::vec<4,T,Q> & v)1645 	GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) {
1646 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);
1647 	}
1648 
1649 	// yzxy
1650 	template<typename T, qualifier Q>
yzxy(const glm::vec<3,T,Q> & v)1651 	GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) {
1652 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);
1653 	}
1654 
1655 	template<typename T, qualifier Q>
yzxy(const glm::vec<4,T,Q> & v)1656 	GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) {
1657 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);
1658 	}
1659 
1660 	// yzxz
1661 	template<typename T, qualifier Q>
yzxz(const glm::vec<3,T,Q> & v)1662 	GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) {
1663 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);
1664 	}
1665 
1666 	template<typename T, qualifier Q>
yzxz(const glm::vec<4,T,Q> & v)1667 	GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) {
1668 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);
1669 	}
1670 
1671 	// yzxw
1672 	template<typename T, qualifier Q>
yzxw(const glm::vec<4,T,Q> & v)1673 	GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) {
1674 		return glm::vec<4, T, Q>(v.y, v.z, v.x, v.w);
1675 	}
1676 
1677 	// yzyx
1678 	template<typename T, qualifier Q>
yzyx(const glm::vec<3,T,Q> & v)1679 	GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) {
1680 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);
1681 	}
1682 
1683 	template<typename T, qualifier Q>
yzyx(const glm::vec<4,T,Q> & v)1684 	GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) {
1685 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);
1686 	}
1687 
1688 	// yzyy
1689 	template<typename T, qualifier Q>
yzyy(const glm::vec<3,T,Q> & v)1690 	GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) {
1691 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);
1692 	}
1693 
1694 	template<typename T, qualifier Q>
yzyy(const glm::vec<4,T,Q> & v)1695 	GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) {
1696 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);
1697 	}
1698 
1699 	// yzyz
1700 	template<typename T, qualifier Q>
yzyz(const glm::vec<3,T,Q> & v)1701 	GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) {
1702 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);
1703 	}
1704 
1705 	template<typename T, qualifier Q>
yzyz(const glm::vec<4,T,Q> & v)1706 	GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) {
1707 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);
1708 	}
1709 
1710 	// yzyw
1711 	template<typename T, qualifier Q>
yzyw(const glm::vec<4,T,Q> & v)1712 	GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) {
1713 		return glm::vec<4, T, Q>(v.y, v.z, v.y, v.w);
1714 	}
1715 
1716 	// yzzx
1717 	template<typename T, qualifier Q>
yzzx(const glm::vec<3,T,Q> & v)1718 	GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) {
1719 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);
1720 	}
1721 
1722 	template<typename T, qualifier Q>
yzzx(const glm::vec<4,T,Q> & v)1723 	GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) {
1724 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);
1725 	}
1726 
1727 	// yzzy
1728 	template<typename T, qualifier Q>
yzzy(const glm::vec<3,T,Q> & v)1729 	GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) {
1730 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);
1731 	}
1732 
1733 	template<typename T, qualifier Q>
yzzy(const glm::vec<4,T,Q> & v)1734 	GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) {
1735 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);
1736 	}
1737 
1738 	// yzzz
1739 	template<typename T, qualifier Q>
yzzz(const glm::vec<3,T,Q> & v)1740 	GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) {
1741 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);
1742 	}
1743 
1744 	template<typename T, qualifier Q>
yzzz(const glm::vec<4,T,Q> & v)1745 	GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) {
1746 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);
1747 	}
1748 
1749 	// yzzw
1750 	template<typename T, qualifier Q>
yzzw(const glm::vec<4,T,Q> & v)1751 	GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) {
1752 		return glm::vec<4, T, Q>(v.y, v.z, v.z, v.w);
1753 	}
1754 
1755 	// yzwx
1756 	template<typename T, qualifier Q>
yzwx(const glm::vec<4,T,Q> & v)1757 	GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) {
1758 		return glm::vec<4, T, Q>(v.y, v.z, v.w, v.x);
1759 	}
1760 
1761 	// yzwy
1762 	template<typename T, qualifier Q>
yzwy(const glm::vec<4,T,Q> & v)1763 	GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) {
1764 		return glm::vec<4, T, Q>(v.y, v.z, v.w, v.y);
1765 	}
1766 
1767 	// yzwz
1768 	template<typename T, qualifier Q>
yzwz(const glm::vec<4,T,Q> & v)1769 	GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) {
1770 		return glm::vec<4, T, Q>(v.y, v.z, v.w, v.z);
1771 	}
1772 
1773 	// yzww
1774 	template<typename T, qualifier Q>
yzww(const glm::vec<4,T,Q> & v)1775 	GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) {
1776 		return glm::vec<4, T, Q>(v.y, v.z, v.w, v.w);
1777 	}
1778 
1779 	// ywxx
1780 	template<typename T, qualifier Q>
ywxx(const glm::vec<4,T,Q> & v)1781 	GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) {
1782 		return glm::vec<4, T, Q>(v.y, v.w, v.x, v.x);
1783 	}
1784 
1785 	// ywxy
1786 	template<typename T, qualifier Q>
ywxy(const glm::vec<4,T,Q> & v)1787 	GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) {
1788 		return glm::vec<4, T, Q>(v.y, v.w, v.x, v.y);
1789 	}
1790 
1791 	// ywxz
1792 	template<typename T, qualifier Q>
ywxz(const glm::vec<4,T,Q> & v)1793 	GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) {
1794 		return glm::vec<4, T, Q>(v.y, v.w, v.x, v.z);
1795 	}
1796 
1797 	// ywxw
1798 	template<typename T, qualifier Q>
ywxw(const glm::vec<4,T,Q> & v)1799 	GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) {
1800 		return glm::vec<4, T, Q>(v.y, v.w, v.x, v.w);
1801 	}
1802 
1803 	// ywyx
1804 	template<typename T, qualifier Q>
ywyx(const glm::vec<4,T,Q> & v)1805 	GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) {
1806 		return glm::vec<4, T, Q>(v.y, v.w, v.y, v.x);
1807 	}
1808 
1809 	// ywyy
1810 	template<typename T, qualifier Q>
ywyy(const glm::vec<4,T,Q> & v)1811 	GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) {
1812 		return glm::vec<4, T, Q>(v.y, v.w, v.y, v.y);
1813 	}
1814 
1815 	// ywyz
1816 	template<typename T, qualifier Q>
ywyz(const glm::vec<4,T,Q> & v)1817 	GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) {
1818 		return glm::vec<4, T, Q>(v.y, v.w, v.y, v.z);
1819 	}
1820 
1821 	// ywyw
1822 	template<typename T, qualifier Q>
ywyw(const glm::vec<4,T,Q> & v)1823 	GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) {
1824 		return glm::vec<4, T, Q>(v.y, v.w, v.y, v.w);
1825 	}
1826 
1827 	// ywzx
1828 	template<typename T, qualifier Q>
ywzx(const glm::vec<4,T,Q> & v)1829 	GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) {
1830 		return glm::vec<4, T, Q>(v.y, v.w, v.z, v.x);
1831 	}
1832 
1833 	// ywzy
1834 	template<typename T, qualifier Q>
ywzy(const glm::vec<4,T,Q> & v)1835 	GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) {
1836 		return glm::vec<4, T, Q>(v.y, v.w, v.z, v.y);
1837 	}
1838 
1839 	// ywzz
1840 	template<typename T, qualifier Q>
ywzz(const glm::vec<4,T,Q> & v)1841 	GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) {
1842 		return glm::vec<4, T, Q>(v.y, v.w, v.z, v.z);
1843 	}
1844 
1845 	// ywzw
1846 	template<typename T, qualifier Q>
ywzw(const glm::vec<4,T,Q> & v)1847 	GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) {
1848 		return glm::vec<4, T, Q>(v.y, v.w, v.z, v.w);
1849 	}
1850 
1851 	// ywwx
1852 	template<typename T, qualifier Q>
ywwx(const glm::vec<4,T,Q> & v)1853 	GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) {
1854 		return glm::vec<4, T, Q>(v.y, v.w, v.w, v.x);
1855 	}
1856 
1857 	// ywwy
1858 	template<typename T, qualifier Q>
ywwy(const glm::vec<4,T,Q> & v)1859 	GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) {
1860 		return glm::vec<4, T, Q>(v.y, v.w, v.w, v.y);
1861 	}
1862 
1863 	// ywwz
1864 	template<typename T, qualifier Q>
ywwz(const glm::vec<4,T,Q> & v)1865 	GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) {
1866 		return glm::vec<4, T, Q>(v.y, v.w, v.w, v.z);
1867 	}
1868 
1869 	// ywww
1870 	template<typename T, qualifier Q>
ywww(const glm::vec<4,T,Q> & v)1871 	GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) {
1872 		return glm::vec<4, T, Q>(v.y, v.w, v.w, v.w);
1873 	}
1874 
1875 	// zxxx
1876 	template<typename T, qualifier Q>
zxxx(const glm::vec<3,T,Q> & v)1877 	GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) {
1878 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);
1879 	}
1880 
1881 	template<typename T, qualifier Q>
zxxx(const glm::vec<4,T,Q> & v)1882 	GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) {
1883 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);
1884 	}
1885 
1886 	// zxxy
1887 	template<typename T, qualifier Q>
zxxy(const glm::vec<3,T,Q> & v)1888 	GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) {
1889 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);
1890 	}
1891 
1892 	template<typename T, qualifier Q>
zxxy(const glm::vec<4,T,Q> & v)1893 	GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) {
1894 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);
1895 	}
1896 
1897 	// zxxz
1898 	template<typename T, qualifier Q>
zxxz(const glm::vec<3,T,Q> & v)1899 	GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) {
1900 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);
1901 	}
1902 
1903 	template<typename T, qualifier Q>
zxxz(const glm::vec<4,T,Q> & v)1904 	GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) {
1905 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);
1906 	}
1907 
1908 	// zxxw
1909 	template<typename T, qualifier Q>
zxxw(const glm::vec<4,T,Q> & v)1910 	GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) {
1911 		return glm::vec<4, T, Q>(v.z, v.x, v.x, v.w);
1912 	}
1913 
1914 	// zxyx
1915 	template<typename T, qualifier Q>
zxyx(const glm::vec<3,T,Q> & v)1916 	GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) {
1917 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);
1918 	}
1919 
1920 	template<typename T, qualifier Q>
zxyx(const glm::vec<4,T,Q> & v)1921 	GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) {
1922 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);
1923 	}
1924 
1925 	// zxyy
1926 	template<typename T, qualifier Q>
zxyy(const glm::vec<3,T,Q> & v)1927 	GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) {
1928 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);
1929 	}
1930 
1931 	template<typename T, qualifier Q>
zxyy(const glm::vec<4,T,Q> & v)1932 	GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) {
1933 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);
1934 	}
1935 
1936 	// zxyz
1937 	template<typename T, qualifier Q>
zxyz(const glm::vec<3,T,Q> & v)1938 	GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) {
1939 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);
1940 	}
1941 
1942 	template<typename T, qualifier Q>
zxyz(const glm::vec<4,T,Q> & v)1943 	GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) {
1944 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);
1945 	}
1946 
1947 	// zxyw
1948 	template<typename T, qualifier Q>
zxyw(const glm::vec<4,T,Q> & v)1949 	GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) {
1950 		return glm::vec<4, T, Q>(v.z, v.x, v.y, v.w);
1951 	}
1952 
1953 	// zxzx
1954 	template<typename T, qualifier Q>
zxzx(const glm::vec<3,T,Q> & v)1955 	GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) {
1956 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);
1957 	}
1958 
1959 	template<typename T, qualifier Q>
zxzx(const glm::vec<4,T,Q> & v)1960 	GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) {
1961 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);
1962 	}
1963 
1964 	// zxzy
1965 	template<typename T, qualifier Q>
zxzy(const glm::vec<3,T,Q> & v)1966 	GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) {
1967 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);
1968 	}
1969 
1970 	template<typename T, qualifier Q>
zxzy(const glm::vec<4,T,Q> & v)1971 	GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) {
1972 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);
1973 	}
1974 
1975 	// zxzz
1976 	template<typename T, qualifier Q>
zxzz(const glm::vec<3,T,Q> & v)1977 	GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) {
1978 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);
1979 	}
1980 
1981 	template<typename T, qualifier Q>
zxzz(const glm::vec<4,T,Q> & v)1982 	GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) {
1983 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);
1984 	}
1985 
1986 	// zxzw
1987 	template<typename T, qualifier Q>
zxzw(const glm::vec<4,T,Q> & v)1988 	GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) {
1989 		return glm::vec<4, T, Q>(v.z, v.x, v.z, v.w);
1990 	}
1991 
1992 	// zxwx
1993 	template<typename T, qualifier Q>
zxwx(const glm::vec<4,T,Q> & v)1994 	GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) {
1995 		return glm::vec<4, T, Q>(v.z, v.x, v.w, v.x);
1996 	}
1997 
1998 	// zxwy
1999 	template<typename T, qualifier Q>
zxwy(const glm::vec<4,T,Q> & v)2000 	GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) {
2001 		return glm::vec<4, T, Q>(v.z, v.x, v.w, v.y);
2002 	}
2003 
2004 	// zxwz
2005 	template<typename T, qualifier Q>
zxwz(const glm::vec<4,T,Q> & v)2006 	GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) {
2007 		return glm::vec<4, T, Q>(v.z, v.x, v.w, v.z);
2008 	}
2009 
2010 	// zxww
2011 	template<typename T, qualifier Q>
zxww(const glm::vec<4,T,Q> & v)2012 	GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) {
2013 		return glm::vec<4, T, Q>(v.z, v.x, v.w, v.w);
2014 	}
2015 
2016 	// zyxx
2017 	template<typename T, qualifier Q>
zyxx(const glm::vec<3,T,Q> & v)2018 	GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) {
2019 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);
2020 	}
2021 
2022 	template<typename T, qualifier Q>
zyxx(const glm::vec<4,T,Q> & v)2023 	GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) {
2024 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);
2025 	}
2026 
2027 	// zyxy
2028 	template<typename T, qualifier Q>
zyxy(const glm::vec<3,T,Q> & v)2029 	GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) {
2030 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);
2031 	}
2032 
2033 	template<typename T, qualifier Q>
zyxy(const glm::vec<4,T,Q> & v)2034 	GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) {
2035 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);
2036 	}
2037 
2038 	// zyxz
2039 	template<typename T, qualifier Q>
zyxz(const glm::vec<3,T,Q> & v)2040 	GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) {
2041 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);
2042 	}
2043 
2044 	template<typename T, qualifier Q>
zyxz(const glm::vec<4,T,Q> & v)2045 	GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) {
2046 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);
2047 	}
2048 
2049 	// zyxw
2050 	template<typename T, qualifier Q>
zyxw(const glm::vec<4,T,Q> & v)2051 	GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) {
2052 		return glm::vec<4, T, Q>(v.z, v.y, v.x, v.w);
2053 	}
2054 
2055 	// zyyx
2056 	template<typename T, qualifier Q>
zyyx(const glm::vec<3,T,Q> & v)2057 	GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) {
2058 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);
2059 	}
2060 
2061 	template<typename T, qualifier Q>
zyyx(const glm::vec<4,T,Q> & v)2062 	GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) {
2063 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);
2064 	}
2065 
2066 	// zyyy
2067 	template<typename T, qualifier Q>
zyyy(const glm::vec<3,T,Q> & v)2068 	GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) {
2069 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);
2070 	}
2071 
2072 	template<typename T, qualifier Q>
zyyy(const glm::vec<4,T,Q> & v)2073 	GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) {
2074 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);
2075 	}
2076 
2077 	// zyyz
2078 	template<typename T, qualifier Q>
zyyz(const glm::vec<3,T,Q> & v)2079 	GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) {
2080 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);
2081 	}
2082 
2083 	template<typename T, qualifier Q>
zyyz(const glm::vec<4,T,Q> & v)2084 	GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) {
2085 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);
2086 	}
2087 
2088 	// zyyw
2089 	template<typename T, qualifier Q>
zyyw(const glm::vec<4,T,Q> & v)2090 	GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) {
2091 		return glm::vec<4, T, Q>(v.z, v.y, v.y, v.w);
2092 	}
2093 
2094 	// zyzx
2095 	template<typename T, qualifier Q>
zyzx(const glm::vec<3,T,Q> & v)2096 	GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) {
2097 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);
2098 	}
2099 
2100 	template<typename T, qualifier Q>
zyzx(const glm::vec<4,T,Q> & v)2101 	GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) {
2102 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);
2103 	}
2104 
2105 	// zyzy
2106 	template<typename T, qualifier Q>
zyzy(const glm::vec<3,T,Q> & v)2107 	GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) {
2108 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);
2109 	}
2110 
2111 	template<typename T, qualifier Q>
zyzy(const glm::vec<4,T,Q> & v)2112 	GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) {
2113 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);
2114 	}
2115 
2116 	// zyzz
2117 	template<typename T, qualifier Q>
zyzz(const glm::vec<3,T,Q> & v)2118 	GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) {
2119 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);
2120 	}
2121 
2122 	template<typename T, qualifier Q>
zyzz(const glm::vec<4,T,Q> & v)2123 	GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) {
2124 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);
2125 	}
2126 
2127 	// zyzw
2128 	template<typename T, qualifier Q>
zyzw(const glm::vec<4,T,Q> & v)2129 	GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) {
2130 		return glm::vec<4, T, Q>(v.z, v.y, v.z, v.w);
2131 	}
2132 
2133 	// zywx
2134 	template<typename T, qualifier Q>
zywx(const glm::vec<4,T,Q> & v)2135 	GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) {
2136 		return glm::vec<4, T, Q>(v.z, v.y, v.w, v.x);
2137 	}
2138 
2139 	// zywy
2140 	template<typename T, qualifier Q>
zywy(const glm::vec<4,T,Q> & v)2141 	GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) {
2142 		return glm::vec<4, T, Q>(v.z, v.y, v.w, v.y);
2143 	}
2144 
2145 	// zywz
2146 	template<typename T, qualifier Q>
zywz(const glm::vec<4,T,Q> & v)2147 	GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) {
2148 		return glm::vec<4, T, Q>(v.z, v.y, v.w, v.z);
2149 	}
2150 
2151 	// zyww
2152 	template<typename T, qualifier Q>
zyww(const glm::vec<4,T,Q> & v)2153 	GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) {
2154 		return glm::vec<4, T, Q>(v.z, v.y, v.w, v.w);
2155 	}
2156 
2157 	// zzxx
2158 	template<typename T, qualifier Q>
zzxx(const glm::vec<3,T,Q> & v)2159 	GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) {
2160 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);
2161 	}
2162 
2163 	template<typename T, qualifier Q>
zzxx(const glm::vec<4,T,Q> & v)2164 	GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) {
2165 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);
2166 	}
2167 
2168 	// zzxy
2169 	template<typename T, qualifier Q>
zzxy(const glm::vec<3,T,Q> & v)2170 	GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) {
2171 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);
2172 	}
2173 
2174 	template<typename T, qualifier Q>
zzxy(const glm::vec<4,T,Q> & v)2175 	GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) {
2176 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);
2177 	}
2178 
2179 	// zzxz
2180 	template<typename T, qualifier Q>
zzxz(const glm::vec<3,T,Q> & v)2181 	GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) {
2182 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);
2183 	}
2184 
2185 	template<typename T, qualifier Q>
zzxz(const glm::vec<4,T,Q> & v)2186 	GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) {
2187 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);
2188 	}
2189 
2190 	// zzxw
2191 	template<typename T, qualifier Q>
zzxw(const glm::vec<4,T,Q> & v)2192 	GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) {
2193 		return glm::vec<4, T, Q>(v.z, v.z, v.x, v.w);
2194 	}
2195 
2196 	// zzyx
2197 	template<typename T, qualifier Q>
zzyx(const glm::vec<3,T,Q> & v)2198 	GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) {
2199 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);
2200 	}
2201 
2202 	template<typename T, qualifier Q>
zzyx(const glm::vec<4,T,Q> & v)2203 	GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) {
2204 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);
2205 	}
2206 
2207 	// zzyy
2208 	template<typename T, qualifier Q>
zzyy(const glm::vec<3,T,Q> & v)2209 	GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) {
2210 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);
2211 	}
2212 
2213 	template<typename T, qualifier Q>
zzyy(const glm::vec<4,T,Q> & v)2214 	GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) {
2215 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);
2216 	}
2217 
2218 	// zzyz
2219 	template<typename T, qualifier Q>
zzyz(const glm::vec<3,T,Q> & v)2220 	GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) {
2221 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);
2222 	}
2223 
2224 	template<typename T, qualifier Q>
zzyz(const glm::vec<4,T,Q> & v)2225 	GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) {
2226 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);
2227 	}
2228 
2229 	// zzyw
2230 	template<typename T, qualifier Q>
zzyw(const glm::vec<4,T,Q> & v)2231 	GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) {
2232 		return glm::vec<4, T, Q>(v.z, v.z, v.y, v.w);
2233 	}
2234 
2235 	// zzzx
2236 	template<typename T, qualifier Q>
zzzx(const glm::vec<3,T,Q> & v)2237 	GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) {
2238 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);
2239 	}
2240 
2241 	template<typename T, qualifier Q>
zzzx(const glm::vec<4,T,Q> & v)2242 	GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) {
2243 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);
2244 	}
2245 
2246 	// zzzy
2247 	template<typename T, qualifier Q>
zzzy(const glm::vec<3,T,Q> & v)2248 	GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) {
2249 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);
2250 	}
2251 
2252 	template<typename T, qualifier Q>
zzzy(const glm::vec<4,T,Q> & v)2253 	GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) {
2254 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);
2255 	}
2256 
2257 	// zzzz
2258 	template<typename T, qualifier Q>
zzzz(const glm::vec<3,T,Q> & v)2259 	GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) {
2260 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);
2261 	}
2262 
2263 	template<typename T, qualifier Q>
zzzz(const glm::vec<4,T,Q> & v)2264 	GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) {
2265 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);
2266 	}
2267 
2268 	// zzzw
2269 	template<typename T, qualifier Q>
zzzw(const glm::vec<4,T,Q> & v)2270 	GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) {
2271 		return glm::vec<4, T, Q>(v.z, v.z, v.z, v.w);
2272 	}
2273 
2274 	// zzwx
2275 	template<typename T, qualifier Q>
zzwx(const glm::vec<4,T,Q> & v)2276 	GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) {
2277 		return glm::vec<4, T, Q>(v.z, v.z, v.w, v.x);
2278 	}
2279 
2280 	// zzwy
2281 	template<typename T, qualifier Q>
zzwy(const glm::vec<4,T,Q> & v)2282 	GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) {
2283 		return glm::vec<4, T, Q>(v.z, v.z, v.w, v.y);
2284 	}
2285 
2286 	// zzwz
2287 	template<typename T, qualifier Q>
zzwz(const glm::vec<4,T,Q> & v)2288 	GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) {
2289 		return glm::vec<4, T, Q>(v.z, v.z, v.w, v.z);
2290 	}
2291 
2292 	// zzww
2293 	template<typename T, qualifier Q>
zzww(const glm::vec<4,T,Q> & v)2294 	GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) {
2295 		return glm::vec<4, T, Q>(v.z, v.z, v.w, v.w);
2296 	}
2297 
2298 	// zwxx
2299 	template<typename T, qualifier Q>
zwxx(const glm::vec<4,T,Q> & v)2300 	GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) {
2301 		return glm::vec<4, T, Q>(v.z, v.w, v.x, v.x);
2302 	}
2303 
2304 	// zwxy
2305 	template<typename T, qualifier Q>
zwxy(const glm::vec<4,T,Q> & v)2306 	GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) {
2307 		return glm::vec<4, T, Q>(v.z, v.w, v.x, v.y);
2308 	}
2309 
2310 	// zwxz
2311 	template<typename T, qualifier Q>
zwxz(const glm::vec<4,T,Q> & v)2312 	GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) {
2313 		return glm::vec<4, T, Q>(v.z, v.w, v.x, v.z);
2314 	}
2315 
2316 	// zwxw
2317 	template<typename T, qualifier Q>
zwxw(const glm::vec<4,T,Q> & v)2318 	GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) {
2319 		return glm::vec<4, T, Q>(v.z, v.w, v.x, v.w);
2320 	}
2321 
2322 	// zwyx
2323 	template<typename T, qualifier Q>
zwyx(const glm::vec<4,T,Q> & v)2324 	GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) {
2325 		return glm::vec<4, T, Q>(v.z, v.w, v.y, v.x);
2326 	}
2327 
2328 	// zwyy
2329 	template<typename T, qualifier Q>
zwyy(const glm::vec<4,T,Q> & v)2330 	GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) {
2331 		return glm::vec<4, T, Q>(v.z, v.w, v.y, v.y);
2332 	}
2333 
2334 	// zwyz
2335 	template<typename T, qualifier Q>
zwyz(const glm::vec<4,T,Q> & v)2336 	GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) {
2337 		return glm::vec<4, T, Q>(v.z, v.w, v.y, v.z);
2338 	}
2339 
2340 	// zwyw
2341 	template<typename T, qualifier Q>
zwyw(const glm::vec<4,T,Q> & v)2342 	GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) {
2343 		return glm::vec<4, T, Q>(v.z, v.w, v.y, v.w);
2344 	}
2345 
2346 	// zwzx
2347 	template<typename T, qualifier Q>
zwzx(const glm::vec<4,T,Q> & v)2348 	GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) {
2349 		return glm::vec<4, T, Q>(v.z, v.w, v.z, v.x);
2350 	}
2351 
2352 	// zwzy
2353 	template<typename T, qualifier Q>
zwzy(const glm::vec<4,T,Q> & v)2354 	GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) {
2355 		return glm::vec<4, T, Q>(v.z, v.w, v.z, v.y);
2356 	}
2357 
2358 	// zwzz
2359 	template<typename T, qualifier Q>
zwzz(const glm::vec<4,T,Q> & v)2360 	GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) {
2361 		return glm::vec<4, T, Q>(v.z, v.w, v.z, v.z);
2362 	}
2363 
2364 	// zwzw
2365 	template<typename T, qualifier Q>
zwzw(const glm::vec<4,T,Q> & v)2366 	GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) {
2367 		return glm::vec<4, T, Q>(v.z, v.w, v.z, v.w);
2368 	}
2369 
2370 	// zwwx
2371 	template<typename T, qualifier Q>
zwwx(const glm::vec<4,T,Q> & v)2372 	GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) {
2373 		return glm::vec<4, T, Q>(v.z, v.w, v.w, v.x);
2374 	}
2375 
2376 	// zwwy
2377 	template<typename T, qualifier Q>
zwwy(const glm::vec<4,T,Q> & v)2378 	GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) {
2379 		return glm::vec<4, T, Q>(v.z, v.w, v.w, v.y);
2380 	}
2381 
2382 	// zwwz
2383 	template<typename T, qualifier Q>
zwwz(const glm::vec<4,T,Q> & v)2384 	GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) {
2385 		return glm::vec<4, T, Q>(v.z, v.w, v.w, v.z);
2386 	}
2387 
2388 	// zwww
2389 	template<typename T, qualifier Q>
zwww(const glm::vec<4,T,Q> & v)2390 	GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) {
2391 		return glm::vec<4, T, Q>(v.z, v.w, v.w, v.w);
2392 	}
2393 
2394 	// wxxx
2395 	template<typename T, qualifier Q>
wxxx(const glm::vec<4,T,Q> & v)2396 	GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) {
2397 		return glm::vec<4, T, Q>(v.w, v.x, v.x, v.x);
2398 	}
2399 
2400 	// wxxy
2401 	template<typename T, qualifier Q>
wxxy(const glm::vec<4,T,Q> & v)2402 	GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) {
2403 		return glm::vec<4, T, Q>(v.w, v.x, v.x, v.y);
2404 	}
2405 
2406 	// wxxz
2407 	template<typename T, qualifier Q>
wxxz(const glm::vec<4,T,Q> & v)2408 	GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) {
2409 		return glm::vec<4, T, Q>(v.w, v.x, v.x, v.z);
2410 	}
2411 
2412 	// wxxw
2413 	template<typename T, qualifier Q>
wxxw(const glm::vec<4,T,Q> & v)2414 	GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) {
2415 		return glm::vec<4, T, Q>(v.w, v.x, v.x, v.w);
2416 	}
2417 
2418 	// wxyx
2419 	template<typename T, qualifier Q>
wxyx(const glm::vec<4,T,Q> & v)2420 	GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) {
2421 		return glm::vec<4, T, Q>(v.w, v.x, v.y, v.x);
2422 	}
2423 
2424 	// wxyy
2425 	template<typename T, qualifier Q>
wxyy(const glm::vec<4,T,Q> & v)2426 	GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) {
2427 		return glm::vec<4, T, Q>(v.w, v.x, v.y, v.y);
2428 	}
2429 
2430 	// wxyz
2431 	template<typename T, qualifier Q>
wxyz(const glm::vec<4,T,Q> & v)2432 	GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) {
2433 		return glm::vec<4, T, Q>(v.w, v.x, v.y, v.z);
2434 	}
2435 
2436 	// wxyw
2437 	template<typename T, qualifier Q>
wxyw(const glm::vec<4,T,Q> & v)2438 	GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) {
2439 		return glm::vec<4, T, Q>(v.w, v.x, v.y, v.w);
2440 	}
2441 
2442 	// wxzx
2443 	template<typename T, qualifier Q>
wxzx(const glm::vec<4,T,Q> & v)2444 	GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) {
2445 		return glm::vec<4, T, Q>(v.w, v.x, v.z, v.x);
2446 	}
2447 
2448 	// wxzy
2449 	template<typename T, qualifier Q>
wxzy(const glm::vec<4,T,Q> & v)2450 	GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) {
2451 		return glm::vec<4, T, Q>(v.w, v.x, v.z, v.y);
2452 	}
2453 
2454 	// wxzz
2455 	template<typename T, qualifier Q>
wxzz(const glm::vec<4,T,Q> & v)2456 	GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) {
2457 		return glm::vec<4, T, Q>(v.w, v.x, v.z, v.z);
2458 	}
2459 
2460 	// wxzw
2461 	template<typename T, qualifier Q>
wxzw(const glm::vec<4,T,Q> & v)2462 	GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) {
2463 		return glm::vec<4, T, Q>(v.w, v.x, v.z, v.w);
2464 	}
2465 
2466 	// wxwx
2467 	template<typename T, qualifier Q>
wxwx(const glm::vec<4,T,Q> & v)2468 	GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) {
2469 		return glm::vec<4, T, Q>(v.w, v.x, v.w, v.x);
2470 	}
2471 
2472 	// wxwy
2473 	template<typename T, qualifier Q>
wxwy(const glm::vec<4,T,Q> & v)2474 	GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) {
2475 		return glm::vec<4, T, Q>(v.w, v.x, v.w, v.y);
2476 	}
2477 
2478 	// wxwz
2479 	template<typename T, qualifier Q>
wxwz(const glm::vec<4,T,Q> & v)2480 	GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) {
2481 		return glm::vec<4, T, Q>(v.w, v.x, v.w, v.z);
2482 	}
2483 
2484 	// wxww
2485 	template<typename T, qualifier Q>
wxww(const glm::vec<4,T,Q> & v)2486 	GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) {
2487 		return glm::vec<4, T, Q>(v.w, v.x, v.w, v.w);
2488 	}
2489 
2490 	// wyxx
2491 	template<typename T, qualifier Q>
wyxx(const glm::vec<4,T,Q> & v)2492 	GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) {
2493 		return glm::vec<4, T, Q>(v.w, v.y, v.x, v.x);
2494 	}
2495 
2496 	// wyxy
2497 	template<typename T, qualifier Q>
wyxy(const glm::vec<4,T,Q> & v)2498 	GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) {
2499 		return glm::vec<4, T, Q>(v.w, v.y, v.x, v.y);
2500 	}
2501 
2502 	// wyxz
2503 	template<typename T, qualifier Q>
wyxz(const glm::vec<4,T,Q> & v)2504 	GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) {
2505 		return glm::vec<4, T, Q>(v.w, v.y, v.x, v.z);
2506 	}
2507 
2508 	// wyxw
2509 	template<typename T, qualifier Q>
wyxw(const glm::vec<4,T,Q> & v)2510 	GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) {
2511 		return glm::vec<4, T, Q>(v.w, v.y, v.x, v.w);
2512 	}
2513 
2514 	// wyyx
2515 	template<typename T, qualifier Q>
wyyx(const glm::vec<4,T,Q> & v)2516 	GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) {
2517 		return glm::vec<4, T, Q>(v.w, v.y, v.y, v.x);
2518 	}
2519 
2520 	// wyyy
2521 	template<typename T, qualifier Q>
wyyy(const glm::vec<4,T,Q> & v)2522 	GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) {
2523 		return glm::vec<4, T, Q>(v.w, v.y, v.y, v.y);
2524 	}
2525 
2526 	// wyyz
2527 	template<typename T, qualifier Q>
wyyz(const glm::vec<4,T,Q> & v)2528 	GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) {
2529 		return glm::vec<4, T, Q>(v.w, v.y, v.y, v.z);
2530 	}
2531 
2532 	// wyyw
2533 	template<typename T, qualifier Q>
wyyw(const glm::vec<4,T,Q> & v)2534 	GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) {
2535 		return glm::vec<4, T, Q>(v.w, v.y, v.y, v.w);
2536 	}
2537 
2538 	// wyzx
2539 	template<typename T, qualifier Q>
wyzx(const glm::vec<4,T,Q> & v)2540 	GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) {
2541 		return glm::vec<4, T, Q>(v.w, v.y, v.z, v.x);
2542 	}
2543 
2544 	// wyzy
2545 	template<typename T, qualifier Q>
wyzy(const glm::vec<4,T,Q> & v)2546 	GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) {
2547 		return glm::vec<4, T, Q>(v.w, v.y, v.z, v.y);
2548 	}
2549 
2550 	// wyzz
2551 	template<typename T, qualifier Q>
wyzz(const glm::vec<4,T,Q> & v)2552 	GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) {
2553 		return glm::vec<4, T, Q>(v.w, v.y, v.z, v.z);
2554 	}
2555 
2556 	// wyzw
2557 	template<typename T, qualifier Q>
wyzw(const glm::vec<4,T,Q> & v)2558 	GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) {
2559 		return glm::vec<4, T, Q>(v.w, v.y, v.z, v.w);
2560 	}
2561 
2562 	// wywx
2563 	template<typename T, qualifier Q>
wywx(const glm::vec<4,T,Q> & v)2564 	GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) {
2565 		return glm::vec<4, T, Q>(v.w, v.y, v.w, v.x);
2566 	}
2567 
2568 	// wywy
2569 	template<typename T, qualifier Q>
wywy(const glm::vec<4,T,Q> & v)2570 	GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) {
2571 		return glm::vec<4, T, Q>(v.w, v.y, v.w, v.y);
2572 	}
2573 
2574 	// wywz
2575 	template<typename T, qualifier Q>
wywz(const glm::vec<4,T,Q> & v)2576 	GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) {
2577 		return glm::vec<4, T, Q>(v.w, v.y, v.w, v.z);
2578 	}
2579 
2580 	// wyww
2581 	template<typename T, qualifier Q>
wyww(const glm::vec<4,T,Q> & v)2582 	GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) {
2583 		return glm::vec<4, T, Q>(v.w, v.y, v.w, v.w);
2584 	}
2585 
2586 	// wzxx
2587 	template<typename T, qualifier Q>
wzxx(const glm::vec<4,T,Q> & v)2588 	GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) {
2589 		return glm::vec<4, T, Q>(v.w, v.z, v.x, v.x);
2590 	}
2591 
2592 	// wzxy
2593 	template<typename T, qualifier Q>
wzxy(const glm::vec<4,T,Q> & v)2594 	GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) {
2595 		return glm::vec<4, T, Q>(v.w, v.z, v.x, v.y);
2596 	}
2597 
2598 	// wzxz
2599 	template<typename T, qualifier Q>
wzxz(const glm::vec<4,T,Q> & v)2600 	GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) {
2601 		return glm::vec<4, T, Q>(v.w, v.z, v.x, v.z);
2602 	}
2603 
2604 	// wzxw
2605 	template<typename T, qualifier Q>
wzxw(const glm::vec<4,T,Q> & v)2606 	GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) {
2607 		return glm::vec<4, T, Q>(v.w, v.z, v.x, v.w);
2608 	}
2609 
2610 	// wzyx
2611 	template<typename T, qualifier Q>
wzyx(const glm::vec<4,T,Q> & v)2612 	GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) {
2613 		return glm::vec<4, T, Q>(v.w, v.z, v.y, v.x);
2614 	}
2615 
2616 	// wzyy
2617 	template<typename T, qualifier Q>
wzyy(const glm::vec<4,T,Q> & v)2618 	GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) {
2619 		return glm::vec<4, T, Q>(v.w, v.z, v.y, v.y);
2620 	}
2621 
2622 	// wzyz
2623 	template<typename T, qualifier Q>
wzyz(const glm::vec<4,T,Q> & v)2624 	GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) {
2625 		return glm::vec<4, T, Q>(v.w, v.z, v.y, v.z);
2626 	}
2627 
2628 	// wzyw
2629 	template<typename T, qualifier Q>
wzyw(const glm::vec<4,T,Q> & v)2630 	GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) {
2631 		return glm::vec<4, T, Q>(v.w, v.z, v.y, v.w);
2632 	}
2633 
2634 	// wzzx
2635 	template<typename T, qualifier Q>
wzzx(const glm::vec<4,T,Q> & v)2636 	GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) {
2637 		return glm::vec<4, T, Q>(v.w, v.z, v.z, v.x);
2638 	}
2639 
2640 	// wzzy
2641 	template<typename T, qualifier Q>
wzzy(const glm::vec<4,T,Q> & v)2642 	GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) {
2643 		return glm::vec<4, T, Q>(v.w, v.z, v.z, v.y);
2644 	}
2645 
2646 	// wzzz
2647 	template<typename T, qualifier Q>
wzzz(const glm::vec<4,T,Q> & v)2648 	GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) {
2649 		return glm::vec<4, T, Q>(v.w, v.z, v.z, v.z);
2650 	}
2651 
2652 	// wzzw
2653 	template<typename T, qualifier Q>
wzzw(const glm::vec<4,T,Q> & v)2654 	GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) {
2655 		return glm::vec<4, T, Q>(v.w, v.z, v.z, v.w);
2656 	}
2657 
2658 	// wzwx
2659 	template<typename T, qualifier Q>
wzwx(const glm::vec<4,T,Q> & v)2660 	GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) {
2661 		return glm::vec<4, T, Q>(v.w, v.z, v.w, v.x);
2662 	}
2663 
2664 	// wzwy
2665 	template<typename T, qualifier Q>
wzwy(const glm::vec<4,T,Q> & v)2666 	GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) {
2667 		return glm::vec<4, T, Q>(v.w, v.z, v.w, v.y);
2668 	}
2669 
2670 	// wzwz
2671 	template<typename T, qualifier Q>
wzwz(const glm::vec<4,T,Q> & v)2672 	GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) {
2673 		return glm::vec<4, T, Q>(v.w, v.z, v.w, v.z);
2674 	}
2675 
2676 	// wzww
2677 	template<typename T, qualifier Q>
wzww(const glm::vec<4,T,Q> & v)2678 	GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) {
2679 		return glm::vec<4, T, Q>(v.w, v.z, v.w, v.w);
2680 	}
2681 
2682 	// wwxx
2683 	template<typename T, qualifier Q>
wwxx(const glm::vec<4,T,Q> & v)2684 	GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) {
2685 		return glm::vec<4, T, Q>(v.w, v.w, v.x, v.x);
2686 	}
2687 
2688 	// wwxy
2689 	template<typename T, qualifier Q>
wwxy(const glm::vec<4,T,Q> & v)2690 	GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) {
2691 		return glm::vec<4, T, Q>(v.w, v.w, v.x, v.y);
2692 	}
2693 
2694 	// wwxz
2695 	template<typename T, qualifier Q>
wwxz(const glm::vec<4,T,Q> & v)2696 	GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) {
2697 		return glm::vec<4, T, Q>(v.w, v.w, v.x, v.z);
2698 	}
2699 
2700 	// wwxw
2701 	template<typename T, qualifier Q>
wwxw(const glm::vec<4,T,Q> & v)2702 	GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) {
2703 		return glm::vec<4, T, Q>(v.w, v.w, v.x, v.w);
2704 	}
2705 
2706 	// wwyx
2707 	template<typename T, qualifier Q>
wwyx(const glm::vec<4,T,Q> & v)2708 	GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) {
2709 		return glm::vec<4, T, Q>(v.w, v.w, v.y, v.x);
2710 	}
2711 
2712 	// wwyy
2713 	template<typename T, qualifier Q>
wwyy(const glm::vec<4,T,Q> & v)2714 	GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) {
2715 		return glm::vec<4, T, Q>(v.w, v.w, v.y, v.y);
2716 	}
2717 
2718 	// wwyz
2719 	template<typename T, qualifier Q>
wwyz(const glm::vec<4,T,Q> & v)2720 	GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) {
2721 		return glm::vec<4, T, Q>(v.w, v.w, v.y, v.z);
2722 	}
2723 
2724 	// wwyw
2725 	template<typename T, qualifier Q>
wwyw(const glm::vec<4,T,Q> & v)2726 	GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) {
2727 		return glm::vec<4, T, Q>(v.w, v.w, v.y, v.w);
2728 	}
2729 
2730 	// wwzx
2731 	template<typename T, qualifier Q>
wwzx(const glm::vec<4,T,Q> & v)2732 	GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) {
2733 		return glm::vec<4, T, Q>(v.w, v.w, v.z, v.x);
2734 	}
2735 
2736 	// wwzy
2737 	template<typename T, qualifier Q>
wwzy(const glm::vec<4,T,Q> & v)2738 	GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) {
2739 		return glm::vec<4, T, Q>(v.w, v.w, v.z, v.y);
2740 	}
2741 
2742 	// wwzz
2743 	template<typename T, qualifier Q>
wwzz(const glm::vec<4,T,Q> & v)2744 	GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) {
2745 		return glm::vec<4, T, Q>(v.w, v.w, v.z, v.z);
2746 	}
2747 
2748 	// wwzw
2749 	template<typename T, qualifier Q>
wwzw(const glm::vec<4,T,Q> & v)2750 	GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) {
2751 		return glm::vec<4, T, Q>(v.w, v.w, v.z, v.w);
2752 	}
2753 
2754 	// wwwx
2755 	template<typename T, qualifier Q>
wwwx(const glm::vec<4,T,Q> & v)2756 	GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) {
2757 		return glm::vec<4, T, Q>(v.w, v.w, v.w, v.x);
2758 	}
2759 
2760 	// wwwy
2761 	template<typename T, qualifier Q>
wwwy(const glm::vec<4,T,Q> & v)2762 	GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) {
2763 		return glm::vec<4, T, Q>(v.w, v.w, v.w, v.y);
2764 	}
2765 
2766 	// wwwz
2767 	template<typename T, qualifier Q>
wwwz(const glm::vec<4,T,Q> & v)2768 	GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) {
2769 		return glm::vec<4, T, Q>(v.w, v.w, v.w, v.z);
2770 	}
2771 
2772 	// wwww
2773 	template<typename T, qualifier Q>
wwww(const glm::vec<4,T,Q> & v)2774 	GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) {
2775 		return glm::vec<4, T, Q>(v.w, v.w, v.w, v.w);
2776 	}
2777 
2778 }
2779