All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MultTrait.h
Go to the documentation of this file.
1 //=================================================================================================
20 //=================================================================================================
21 
22 #ifndef _BLAZE_MATH_TRAITS_MULTTRAIT_H_
23 #define _BLAZE_MATH_TRAITS_MULTTRAIT_H_
24 
25 
26 //*************************************************************************************************
27 // Includes
28 //*************************************************************************************************
29 
30 #include <cstddef>
31 #include <blaze/util/Complex.h>
32 #include <blaze/util/InvalidType.h>
33 #include <blaze/util/SelectType.h>
39 
40 
41 namespace blaze {
42 
43 //=================================================================================================
44 //
45 // CLASS DEFINITION
46 //
47 //=================================================================================================
48 
49 //*************************************************************************************************
126 template< typename T1 // Type of the left-hand side operand
127  , typename T2 > // Type of the right-hand side operand
128 struct MultTrait
129 {
130  private:
131  //**********************************************************************************************
133  struct Failure { typedef INVALID_TYPE Type; };
135  //**********************************************************************************************
136 
137  //**********************************************************************************************
142  //**********************************************************************************************
143 
144  //**********************************************************************************************
146  typedef typename RemoveReference< typename RemoveCV<T1>::Type >::Type Type1;
147  typedef typename RemoveReference< typename RemoveCV<T2>::Type >::Type Type2;
149  //**********************************************************************************************
150 
151  public:
152  //**********************************************************************************************
154  typedef typename SelectType< qualified, MultTrait<Type1,Type2>, Failure >::Type::Type Type;
156  //**********************************************************************************************
157 };
158 //*************************************************************************************************
159 
160 
161 
162 
163 //=================================================================================================
164 //
165 // MULTTRAIT SPECIALIZATION MACROS
166 //
167 //=================================================================================================
168 
169 //*************************************************************************************************
176 #define BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION(T1,T2,RES) \
177  template<> \
178  struct MultTrait< T1, T2 > \
179  { \
180  typedef RES Type; \
181  }
182 
183 //*************************************************************************************************
184 
185 
186 //*************************************************************************************************
193 #define BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( T1 ) \
194  template< typename T2 > \
195  struct MultTrait< T1, complex<T2> > \
196  { \
197  typedef complex<T2> Type; \
198  }; \
199  template< typename T2 > \
200  struct MultTrait< complex<T2>, T1 > \
201  { \
202  typedef complex<T2> Type; \
203  }
204 
205 //*************************************************************************************************
206 
207 
208 
209 
210 //=================================================================================================
211 //
212 // UNSIGNED CHAR SPECIALIZATIONS
213 //
214 //=================================================================================================
215 
216 //*************************************************************************************************
218 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , unsigned char , unsigned char );
219 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , char , char );
220 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , signed char , signed char );
221 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , wchar_t , wchar_t );
222 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , unsigned short, unsigned short );
223 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , short , short );
224 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , unsigned int , unsigned int );
225 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , int , int );
226 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , unsigned long , unsigned long );
227 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , long , long );
228 #if defined(_WIN64)
229 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , std::size_t , std::size_t );
230 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , std::ptrdiff_t, std::ptrdiff_t );
231 #endif
232 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , float , float );
233 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , double , double );
234 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned char , long double , long double );
236 //*************************************************************************************************
237 
238 
239 
240 
241 //=================================================================================================
242 //
243 // CHAR SPECIALIZATIONS
244 //
245 //=================================================================================================
246 
247 //*************************************************************************************************
249 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , unsigned char , char );
250 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , char , char );
251 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , signed char , signed char );
252 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , wchar_t , wchar_t );
253 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , unsigned short, unsigned short );
254 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , short , short );
255 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , unsigned int , unsigned int );
256 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , int , int );
257 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , unsigned long , unsigned long );
258 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , long , long );
259 #if defined(_WIN64)
260 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , std::size_t , std::size_t );
261 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , std::ptrdiff_t, std::ptrdiff_t );
262 #endif
263 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , float , float );
264 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , double , double );
265 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( char , long double , long double );
267 //*************************************************************************************************
268 
269 
270 
271 
272 //=================================================================================================
273 //
274 // SIGNED CHAR SPECIALIZATIONS
275 //
276 //=================================================================================================
277 
278 //*************************************************************************************************
280 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , unsigned char , signed char );
281 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , char , signed char );
282 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , signed char , signed char );
283 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , wchar_t , wchar_t );
284 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , unsigned short, unsigned short );
285 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , short , short );
286 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , unsigned int , unsigned int );
287 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , int , int );
288 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , unsigned long , unsigned long );
289 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , long , long );
290 #if defined(_WIN64)
291 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , std::size_t , std::size_t );
292 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , std::ptrdiff_t, std::ptrdiff_t );
293 #endif
294 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , float , float );
295 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , double , double );
296 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( signed char , long double , long double );
298 //*************************************************************************************************
299 
300 
301 
302 
303 //=================================================================================================
304 //
305 // WCHAR_T SPECIALIZATIONS
306 //
307 //=================================================================================================
308 
309 //*************************************************************************************************
311 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , unsigned char , wchar_t );
312 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , char , wchar_t );
313 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , signed char , wchar_t );
314 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , wchar_t , wchar_t );
315 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , unsigned short, unsigned short );
316 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , short , short );
317 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , unsigned int , unsigned int );
318 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , int , int );
319 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , unsigned long , unsigned long );
320 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , long , long );
321 #if defined(_WIN64)
322 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , std::size_t , std::size_t );
323 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , std::ptrdiff_t, std::ptrdiff_t );
324 #endif
325 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , float , float );
326 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , double , double );
327 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( wchar_t , long double , long double );
329 //*************************************************************************************************
330 
331 
332 
333 
334 //=================================================================================================
335 //
336 // UNSIGNED SHORT SPECIALIZATIONS
337 //
338 //=================================================================================================
339 
340 //*************************************************************************************************
342 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, unsigned char , unsigned short );
343 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, char , unsigned short );
344 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, signed char , unsigned short );
345 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, wchar_t , unsigned short );
346 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, unsigned short, unsigned short );
347 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, short , short );
348 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, unsigned int , unsigned int );
349 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, int , int );
350 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, unsigned long , unsigned long );
351 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, long , long );
352 #if defined(_WIN64)
353 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, std::size_t , std::size_t );
354 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, std::ptrdiff_t, std::ptrdiff_t );
355 #endif
356 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, float , float );
357 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, double , double );
358 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned short, long double , long double );
360 //*************************************************************************************************
361 
362 
363 
364 
365 //=================================================================================================
366 //
367 // SHORT SPECIALIZATIONS
368 //
369 //=================================================================================================
370 
371 //*************************************************************************************************
373 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , unsigned char , short );
374 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , char , short );
375 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , signed char , short );
376 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , wchar_t , short );
377 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , unsigned short, short );
378 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , short , short );
379 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , unsigned int , unsigned int );
380 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , int , int );
381 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , unsigned long , unsigned long );
382 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , long , long );
383 #if defined(_WIN64)
384 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , std::size_t , std::size_t );
385 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , std::ptrdiff_t, std::ptrdiff_t );
386 #endif
387 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , float , float );
388 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , double , double );
389 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( short , long double , long double );
391 //*************************************************************************************************
392 
393 
394 
395 
396 //=================================================================================================
397 //
398 // UNSIGNED INT SPECIALIZATIONS
399 //
400 //=================================================================================================
401 
402 //*************************************************************************************************
404 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , unsigned char , unsigned int );
405 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , char , unsigned int );
406 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , signed char , unsigned int );
407 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , wchar_t , unsigned int );
408 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , unsigned short, unsigned int );
409 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , short , unsigned int );
410 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , unsigned int , unsigned int );
411 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , int , int );
412 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , unsigned long , unsigned long );
413 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , long , long );
414 #if defined(_WIN64)
415 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , std::size_t , std::size_t );
416 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , std::ptrdiff_t, std::ptrdiff_t );
417 #endif
418 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , float , float );
419 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , double , double );
420 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned int , long double , long double );
422 //*************************************************************************************************
423 
424 
425 
426 
427 //=================================================================================================
428 //
429 // INT SPECIALIZATIONS
430 //
431 //=================================================================================================
432 
433 //*************************************************************************************************
435 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , unsigned char , int );
436 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , char , int );
437 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , signed char , int );
438 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , wchar_t , int );
439 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , unsigned short, int );
440 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , short , int );
441 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , unsigned int , int );
442 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , int , int );
443 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , unsigned long , unsigned long );
444 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , long , long );
445 #if defined(_WIN64)
446 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , std::size_t , std::size_t );
447 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , std::ptrdiff_t, std::ptrdiff_t );
448 #endif
449 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , float , float );
450 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , double , double );
451 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( int , long double , long double );
453 //*************************************************************************************************
454 
455 
456 
457 
458 //=================================================================================================
459 //
460 // UNSIGNED LONG SPECIALIZATIONS
461 //
462 //=================================================================================================
463 
464 //*************************************************************************************************
466 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , unsigned char , unsigned long );
467 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , char , unsigned long );
468 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , signed char , unsigned long );
469 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , wchar_t , unsigned long );
470 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , unsigned short, unsigned long );
471 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , short , unsigned long );
472 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , unsigned int , unsigned long );
473 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , int , unsigned long );
474 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , unsigned long , unsigned long );
475 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , long , long );
476 #if defined(_WIN64)
477 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , std::size_t , std::size_t );
478 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , std::ptrdiff_t, std::ptrdiff_t );
479 #endif
480 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , float , float );
481 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , double , double );
482 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( unsigned long , long double , long double );
484 //*************************************************************************************************
485 
486 
487 
488 
489 //=================================================================================================
490 //
491 // LONG SPECIALIZATIONS
492 //
493 //=================================================================================================
494 
495 //*************************************************************************************************
497 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , unsigned char , long );
498 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , char , long );
499 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , signed char , long );
500 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , wchar_t , long );
501 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , unsigned short, long );
502 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , short , long );
503 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , unsigned int , long );
504 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , int , long );
505 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , unsigned long , long );
506 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , long , long );
507 #if defined(_WIN64)
508 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , std::size_t , std::size_t );
509 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , std::ptrdiff_t, std::ptrdiff_t );
510 #endif
511 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , float , float );
512 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , double , double );
513 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long , long double , long double );
515 //*************************************************************************************************
516 
517 
518 
519 
520 //=================================================================================================
521 //
522 // SIZE_T SPECIALIZATIONS
523 //
524 //=================================================================================================
525 
526 //*************************************************************************************************
527 #if defined(_WIN64)
528 
529 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , unsigned char , std::size_t );
530 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , char , std::size_t );
531 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , signed char , std::size_t );
532 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , wchar_t , std::size_t );
533 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , unsigned short, std::size_t );
534 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , short , std::size_t );
535 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , unsigned int , std::size_t );
536 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , int , std::size_t );
537 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , unsigned long , std::size_t );
538 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , long , std::size_t );
539 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , std::size_t , std::size_t );
540 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , std::ptrdiff_t, std::ptrdiff_t );
541 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , float , float );
542 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , double , double );
543 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::size_t , long double , long double );
545 #endif
546 //*************************************************************************************************
547 
548 
549 
550 
551 //=================================================================================================
552 //
553 // PTRDIFF_T SPECIALIZATIONS
554 //
555 //=================================================================================================
556 
557 //*************************************************************************************************
558 #if defined(_WIN64)
559 
560 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned char , std::ptrdiff_t );
561 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, char , std::ptrdiff_t );
562 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, signed char , std::ptrdiff_t );
563 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, wchar_t , std::ptrdiff_t );
564 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned short, std::ptrdiff_t );
565 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, short , std::ptrdiff_t );
566 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned int , std::ptrdiff_t );
567 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, int , std::ptrdiff_t );
568 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, unsigned long , std::ptrdiff_t );
569 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, long , std::ptrdiff_t );
570 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, std::size_t , std::ptrdiff_t );
571 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, std::ptrdiff_t, std::ptrdiff_t );
572 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, float , float );
573 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, double , double );
574 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t, long double , long double );
576 #endif
577 //*************************************************************************************************
578 
579 
580 
581 
582 //=================================================================================================
583 //
584 // FLOAT SPECIALIZATIONS
585 //
586 //=================================================================================================
587 
588 //*************************************************************************************************
590 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , unsigned char , float );
591 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , char , float );
592 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , signed char , float );
593 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , wchar_t , float );
594 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , unsigned short, float );
595 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , short , float );
596 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , unsigned int , float );
597 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , int , float );
598 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , unsigned long , float );
599 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , long , float );
600 #if defined(_WIN64)
601 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , std::size_t , float );
602 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , std::ptrdiff_t, float );
603 #endif
604 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , float , float );
605 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , double , double );
606 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( float , long double , long double );
608 //*************************************************************************************************
609 
610 
611 
612 
613 //=================================================================================================
614 //
615 // DOUBLE SPECIALIZATIONS
616 //
617 //=================================================================================================
618 
619 //*************************************************************************************************
621 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , unsigned char , double );
622 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , char , double );
623 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , signed char , double );
624 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , wchar_t , double );
625 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , unsigned short, double );
626 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , short , double );
627 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , unsigned int , double );
628 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , int , double );
629 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , unsigned long , double );
630 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , long , double );
631 #if defined(_WIN64)
632 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , std::size_t , double );
633 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , std::ptrdiff_t, double );
634 #endif
635 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , float , double );
636 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , double , double );
637 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( double , long double , long double );
639 //*************************************************************************************************
640 
641 
642 
643 
644 //=================================================================================================
645 //
646 // LONG DOUBLE SPECIALIZATIONS
647 //
648 //=================================================================================================
649 
650 //*************************************************************************************************
652 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , unsigned char , long double );
653 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , char , long double );
654 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , signed char , long double );
655 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , wchar_t , long double );
656 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , unsigned short, long double );
657 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , short , long double );
658 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , unsigned int , long double );
659 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , int , long double );
660 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , unsigned long , long double );
661 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , long , long double );
662 #if defined(_WIN64)
663 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , std::size_t , long double );
664 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , std::ptrdiff_t, long double );
665 #endif
666 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , float , long double );
667 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , double , long double );
668 BLAZE_CREATE_BUILTIN_MULTTRAIT_SPECIALIZATION( long double , long double , long double );
670 //*************************************************************************************************
671 
672 
673 
674 
675 //=================================================================================================
676 //
677 // COMPLEX SPECIALIZATIONS
678 //
679 //=================================================================================================
680 
681 //*************************************************************************************************
683 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( unsigned char );
684 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( char );
685 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( signed char );
686 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( wchar_t );
687 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( unsigned short );
688 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( short );
689 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( unsigned int );
690 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( int );
691 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( unsigned long );
692 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( long );
693 #if defined(_WIN64)
694 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( std::size_t );
695 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( std::ptrdiff_t );
696 #endif
697 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( float );
698 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( double );
699 BLAZE_CREATE_COMPLEX_MULTTRAIT_SPECIALIZATION( long double );
701 //*************************************************************************************************
702 
703 
704 //*************************************************************************************************
706 template< typename T1, typename T2 >
707 struct MultTrait< complex<T1>, complex<T2> >
708 {
709  typedef complex<typename MultTrait<T1,T2>::Type> Type;
710 };
712 //*************************************************************************************************
713 
714 } // namespace blaze
715 
716 #endif