16 #include "CLHEP/Utility/noncopyable.h"
17 #include "CLHEP/Utility/type_traits.h"
23 using namespace CLHEP;
53 template<
typename T >
142 UDT& operator=(
const UDT&);
152 typedef int(*
f2)(int);
153 typedef int(*
f3)(int, bool);
170 #if ! defined(_MSC_VER)
262 {
operator void*(){
return this;} };
266 operator int*(){
return &i;}
287 virtual void foo() = 0;
288 virtual void foo2() = 0;
294 virtual void foo() = 0;
295 virtual void foo2() = 0;
299 {
virtual void foo3() = 0; };
301 struct incomplete_type;
306 virtual void method();
313 {
virtual void method(); };
325 typedef void foo3_t(
int&,
bool,
int,
int);
326 typedef void foo4_t(
int,
bool,
int*,
int[],
int,
int,
int,
int,
int);
365 {
operator char*()
const; };
375 assert(evaluate<void >() ==
cat_void);
376 assert(evaluate<void const >() ==
cat_void);
377 assert(evaluate<void volatile >() ==
cat_void);
378 assert(evaluate<void const volatile >() ==
cat_void);
381 assert(evaluate<bool >() ==
cat_int);
382 assert(evaluate<bool const >() ==
cat_int);
383 assert(evaluate<bool volatile >() ==
cat_int);
384 assert(evaluate<bool const volatile >() ==
cat_int);
385 assert(evaluate<char >() ==
cat_int);
386 assert(evaluate<char const >() ==
cat_int);
387 assert(evaluate<char volatile >() ==
cat_int);
388 assert(evaluate<char const volatile >() ==
cat_int);
389 typedef signed char schar;
390 assert(evaluate<schar >() ==
cat_int);
391 assert(evaluate<schar const >() ==
cat_int);
392 assert(evaluate<schar volatile >() ==
cat_int);
393 assert(evaluate<schar const volatile >() ==
cat_int);
394 typedef unsigned char uchar;
395 assert(evaluate<uchar >() ==
cat_int);
396 assert(evaluate<uchar const >() ==
cat_int);
397 assert(evaluate<uchar volatile >() ==
cat_int);
398 assert(evaluate<uchar const volatile >() ==
cat_int);
399 assert(evaluate<short >() ==
cat_int);
400 assert(evaluate<short const >() ==
cat_int);
401 assert(evaluate<short volatile >() ==
cat_int);
402 assert(evaluate<short const volatile >() ==
cat_int);
403 typedef unsigned short ushort;
404 assert(evaluate<ushort >() ==
cat_int);
405 assert(evaluate<ushort const >() ==
cat_int);
406 assert(evaluate<ushort volatile >() ==
cat_int);
407 assert(evaluate<ushort const volatile >() ==
cat_int);
408 assert(evaluate<int >() ==
cat_int);
409 assert(evaluate<int const >() ==
cat_int);
410 assert(evaluate<int volatile >() ==
cat_int);
411 assert(evaluate<int const volatile >() ==
cat_int);
412 typedef unsigned int uint;
413 assert(evaluate<uint >() ==
cat_int);
414 assert(evaluate<uint const >() ==
cat_int);
415 assert(evaluate<uint volatile >() ==
cat_int);
416 assert(evaluate<uint const volatile >() ==
cat_int);
417 assert(evaluate<long >() ==
cat_int);
418 assert(evaluate<long const >() ==
cat_int);
419 assert(evaluate<long volatile >() ==
cat_int);
420 assert(evaluate<long const volatile >() ==
cat_int);
421 typedef unsigned long ulong;
422 assert(evaluate<ulong >() ==
cat_int);
423 assert(evaluate<ulong const >() ==
cat_int);
424 assert(evaluate<ulong volatile >() ==
cat_int);
425 assert(evaluate<ulong const volatile >() ==
cat_int);
428 assert(evaluate<float >() ==
cat_flt);
429 assert(evaluate<float const >() ==
cat_flt);
430 assert(evaluate<float volatile >() ==
cat_flt);
431 assert(evaluate<float const volatile >() ==
cat_flt);
432 assert(evaluate<double >() ==
cat_flt);
433 assert(evaluate<double const >() ==
cat_flt);
434 assert(evaluate<double volatile >() ==
cat_flt);
435 assert(evaluate<double const volatile >() ==
cat_flt);
436 typedef long double ldouble;
437 assert(evaluate<ldouble >() ==
cat_flt);
438 assert(evaluate<ldouble const >() ==
cat_flt);
439 assert(evaluate<ldouble volatile >() ==
cat_flt);
440 assert(evaluate<ldouble const volatile >() ==
cat_flt);
453 assert(evaluate<char * >() ==
cat_ptr);
454 assert(evaluate<int * >() ==
cat_ptr);
455 assert(evaluate<int const * >() ==
cat_ptr);
456 assert(evaluate<int volatile * >() ==
cat_ptr);
457 assert(evaluate<int * * >() ==
cat_ptr);
458 assert(evaluate<int * * volatile >() ==
cat_ptr);
459 assert(evaluate<uint volatile * >() ==
cat_ptr);
460 assert(evaluate<long volatile * const >() ==
cat_ptr);
461 assert(evaluate<double * const * >() ==
cat_ptr);
462 assert(evaluate<float * const * const >() ==
cat_ptr);
464 assert(evaluate<non_pointer* >() ==
cat_ptr);
465 assert(evaluate<f1 >() ==
cat_ptr);
466 assert(evaluate<f2 >() ==
cat_ptr);
467 assert(evaluate<f3 >() ==
cat_ptr);
470 assert(evaluate<int & >() ==
cat_lref);
471 assert(evaluate<int const & >() ==
cat_lref);
472 assert(evaluate<int volatile & >() ==
cat_lref);
473 assert(evaluate<int const volatile & >() ==
cat_lref);
474 assert(evaluate<int * & >() ==
cat_lref);
477 assert(evaluate<r_type >() ==
cat_lref);
478 #if ! defined(_MSC_VER)
479 assert(evaluate<cr_type >() ==
cat_lref);
481 assert(evaluate<UDT & >() ==
cat_lref);
482 assert(evaluate<const UDT & >() ==
cat_lref);
483 assert(evaluate<volatile UDT & >() ==
cat_lref);
484 assert(evaluate<const volatile UDT & >() ==
cat_lref);
504 assert(evaluate<myenum >() ==
cat_enum);
505 assert(evaluate<myenum const >() ==
cat_enum);
506 assert(evaluate<myenum volatile >() ==
cat_enum);
507 assert(evaluate<myenum const volatile >() ==
cat_enum);
508 assert(evaluate<enum_UDT >() ==
cat_enum);
512 assert(evaluate<myblend >() ==
cat_union);
513 assert(evaluate<myblend const >() ==
cat_union);
514 assert(evaluate<myblend volatile >() ==
cat_union);
515 assert(evaluate<myblend const volatile >() ==
cat_union);
516 assert(evaluate<union_UDT >() ==
cat_union);
517 assert(evaluate<POD_union_UDT >() ==
cat_union);
518 assert(evaluate<empty_union_UDT >() ==
cat_union);
519 assert(evaluate<empty_POD_union_UDT >() ==
cat_union);
520 assert(evaluate<union_UDT const >() ==
cat_union);
521 assert(evaluate<POD_union_UDT volatile >() ==
cat_union);
522 assert(evaluate<empty_union_UDT const volatile>() ==
cat_union);
523 assert(evaluate<empty_POD_union_UDT const>() ==
cat_union);
528 assert(evaluate<UDT const >() ==
cat_class);
529 assert(evaluate<UDT volatile >() ==
cat_class);
530 assert(evaluate<UDT const volatile >() ==
cat_class);
531 assert(evaluate<empty_UDT >() ==
cat_class);
532 assert(evaluate<test_abc1 >() ==
cat_class);
533 assert(evaluate<test_abc1 const >() ==
cat_class);
534 assert(evaluate<std::iostream >() ==
cat_class);
539 assert(evaluate<foo0_t >() ==
cat_fctn);
540 assert(evaluate<foo1_t >() ==
cat_fctn);
541 assert(evaluate<foo2_t >() ==
cat_fctn);
542 assert(evaluate<foo3_t >() ==
cat_fctn);
543 assert(evaluate<foo4_t >() ==
cat_fctn);