[pygccxml-commit] SF.net SVN: pygccxml: [974] pygccxml_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2007-04-10 06:09:30
|
Revision: 974 http://svn.sourceforge.net/pygccxml/?rev=974&view=rev Author: roman_yakovenko Date: 2007-04-09 23:09:31 -0700 (Mon, 09 Apr 2007) Log Message: ----------- adding new test case Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/decl_printer.py pygccxml_dev/unittests/data/type_traits.hpp Modified: pygccxml_dev/pygccxml/declarations/decl_printer.py =================================================================== --- pygccxml_dev/pygccxml/declarations/decl_printer.py 2007-04-09 19:22:53 UTC (rev 973) +++ pygccxml_dev/pygccxml/declarations/decl_printer.py 2007-04-10 06:09:31 UTC (rev 974) @@ -109,7 +109,11 @@ def visit_constructor( self ): self.print_decl_header() - + if self.__print_details: + self.writer( ' ' * ( self.level + 1 ) * self.INDENT_SIZE + + 'copy constructor: ' + str(self.__inst.is_copy_constructor) + + os.linesep ) + def visit_destructor( self ): self.print_decl_header() Modified: pygccxml_dev/unittests/data/type_traits.hpp =================================================================== --- pygccxml_dev/unittests/data/type_traits.hpp 2007-04-09 19:22:53 UTC (rev 973) +++ pygccxml_dev/unittests/data/type_traits.hpp 2007-04-10 06:09:31 UTC (rev 974) @@ -1,702 +1,714 @@ -// Copyright 2004 Roman Yakovenko. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -//Almost all test cases have been taken -//from boost.type_traits (http://www.boost.org) library. - -#include <string> -#include <iostream> - -#define TYPE_PERMUTATION( BASE, NAME ) \ - typedef BASE NAME##_t; \ - typedef BASE const NAME##_const_t; \ - typedef BASE volatile NAME##_volatile_t; - -struct some_struct_t{ - void do_smth(); - int member; -}; - -namespace is_std_ostream{ -namespace yes{ - typedef std::ostream ostream_type; -} -namespace no{ - typedef int int__; -} -} - -namespace is_std_wostream{ -namespace yes{ - typedef std::wostream wostream_type; -} -namespace no{ - typedef int int__; -} -} - - -struct incomplete_type; - -namespace is_void{ -namespace yes{ - typedef void void_t; - typedef void const void_cont_t; - typedef void volatile void_volatile_t; -} -namespace no{ - typedef void* void_ptr_t; - typedef int int_t; - typedef some_struct_t some_struct_alias_t; - typedef incomplete_type incomplete_type_alias_t; - typedef void(*function_t)(); - typedef void (some_struct_t::*member_function_t)(); -} } - -namespace is_noncopyable{ - -namespace detail{ - struct x{ - private: - x( const x& ); - x& operator=(const x& ); - }; -} - -namespace yes{ - typedef detail::x x; -} -namespace no{ - typedef std::string string_type; -} -} - -namespace is_integral{ -namespace yes{ - - TYPE_PERMUTATION( bool, bool ) - TYPE_PERMUTATION( char, char ) - TYPE_PERMUTATION( unsigned char, uchar ) - TYPE_PERMUTATION( short, short ) - TYPE_PERMUTATION( unsigned short, ushort ) - TYPE_PERMUTATION( int, int ) - TYPE_PERMUTATION( unsigned int, uint ) - TYPE_PERMUTATION( long, long ) - TYPE_PERMUTATION( unsigned long, ulong ) - TYPE_PERMUTATION( long long int, llint ) - TYPE_PERMUTATION( long long unsigned int, ulli ) -} -namespace no{ - typedef some_struct_t some_struct_alias_t; - typedef float* float_ptr_t; - typedef float& float_ref_t; - typedef const float& const_float_ref_t; - typedef incomplete_type incomplete_type_alias; - typedef void(*function_t)(); - typedef void (some_struct_t::*member_function_t)(); - TYPE_PERMUTATION( void, void ) - TYPE_PERMUTATION( float, float ) - TYPE_PERMUTATION( double, double ) - TYPE_PERMUTATION( long double, ldouble ) -} } - -namespace is_floating_point{ -namespace yes{ - - TYPE_PERMUTATION( float, float ) - TYPE_PERMUTATION( double, double ) - TYPE_PERMUTATION( long double, ldouble ) -} -namespace no{ - typedef some_struct_t some_struct_alias_t; - typedef float* float_ptr_t; - typedef float& float_ref_t; - typedef const float& const_float_ref_t; - typedef incomplete_type incomplete_type_alias; - typedef void(*function_t)(); - typedef void (some_struct_t::*member_function_t)(); - TYPE_PERMUTATION( void, void ) - TYPE_PERMUTATION( bool, bool ) - TYPE_PERMUTATION( char, char ) - TYPE_PERMUTATION( unsigned char, uchar ) - TYPE_PERMUTATION( short, short ) - TYPE_PERMUTATION( unsigned short, ushort ) - TYPE_PERMUTATION( int, int ) - TYPE_PERMUTATION( unsigned int, uint ) - TYPE_PERMUTATION( long, long ) - TYPE_PERMUTATION( unsigned long, ulong ) - TYPE_PERMUTATION( long long int, llint ) - TYPE_PERMUTATION( long long unsigned int, ulli ) -} } - -namespace is_fundamental{ -namespace yes{ - -#define FUNDAMENTAL_TYPE_PERMUTATION( BASE, NAME ) \ - typedef BASE NAME##_t; \ - typedef BASE const NAME##_const_t; \ - typedef BASE volatile NAME##_volatile_t; - - TYPE_PERMUTATION( void, void ) - TYPE_PERMUTATION( bool, bool ) - TYPE_PERMUTATION( char, char ) - TYPE_PERMUTATION( unsigned char, uchar ) - TYPE_PERMUTATION( short, short ) - TYPE_PERMUTATION( unsigned short, ushort ) - TYPE_PERMUTATION( int, int ) - TYPE_PERMUTATION( unsigned int, uint ) - TYPE_PERMUTATION( long, long ) - TYPE_PERMUTATION( unsigned long, ulong ) - TYPE_PERMUTATION( long long int, llint ) - TYPE_PERMUTATION( long long unsigned int, ulli ) - TYPE_PERMUTATION( float, float ) - TYPE_PERMUTATION( double, double ) - TYPE_PERMUTATION( long double, ldouble ) -} -namespace no{ - typedef some_struct_t some_struct_alias_t; - typedef float* float_ptr_t; - typedef float& float_ref_t; - typedef const float& const_float_ref_t; - typedef incomplete_type incomplete_type_alias; - typedef void(*function_t)(); - typedef void (some_struct_t::*member_function_t)(); - -} } - -namespace is_pointer{ -namespace yes{ - typedef int* int_ptr_t; - typedef const int* const_int_ptr_t; - typedef volatile int* volatile_int_ptr_t; - typedef some_struct_t* some_struct_ptr_t; - typedef int* const int_const_ptr_t; - typedef int* volatile int_volatile_ptr_t; - typedef void(*function_t)(); - typedef void (some_struct_t::*member_function_t)(); -} - -namespace no{ - typedef int int_t; - typedef int& int_ref_t; - typedef some_struct_t some_struct_alias_t; - typedef int*& int_ptr_ref_t; -} } - - -namespace remove_pointer{ -namespace before{ - typedef int* x1; - typedef const int* x2; - typedef volatile int* x3; - typedef some_struct_t* x4; - typedef int* const x5; - typedef int* volatile x6; - typedef void(*x7)(); - typedef void (some_struct_t::*x8)(); -} - -namespace after{ - typedef int x1; - typedef const int x2; - typedef volatile int x3; - typedef some_struct_t x4; - typedef int const x5; - typedef int volatile x6; - typedef void(*x7)(); - typedef void (some_struct_t::*x8)(); -} } - - -namespace is_reference{ -namespace yes{ - - typedef int& int_ref_t; - typedef const int& const_int_ref_t; - typedef int const& int_const_ref_t; - typedef some_struct_t& some_struct_ref_t; - typedef int*& int_ptr_ref_t; -} - -namespace no{ - typedef int* int_ptr_t; - typedef const int* const_int_ptr_t; - typedef volatile int* volatile_int_ptr_t; - typedef some_struct_t* some_struct_ptr_t; - typedef int* const int_const_ptr_t; - typedef int* volatile int_volatile_ptr_t; - typedef void(*function_t)(); - typedef void (some_struct_t::*member_function_t)(); - typedef int int_t; -} } - -namespace remove_reference{ -namespace before{ - - typedef int& x1; - typedef const int& x2; - typedef some_struct_t& x3; - typedef int*& x4; - typedef void (some_struct_t::*x5)(); -} - -namespace after{ - typedef int x1; - typedef const int x2; - typedef some_struct_t x3; - typedef int* x4; - typedef void (some_struct_t::*x5)(); -} } - -namespace is_const{ -namespace yes{ - - typedef const void const_void_t; - typedef const incomplete_type const_incomplete_type_t; - typedef int* const int_const_t; - //TODO typedef const int& const_int_ref_t; -} - -namespace no{ - typedef int* int_ptr_t; - typedef const int* const_int_ptr_t; - typedef volatile int* volatile_int_ptr_t; - typedef some_struct_t* some_struct_ptr_t; - typedef int* volatile int_volatile_ptr_t; - typedef void(*function_t)(); - typedef void (some_struct_t::*member_function_t)(); - typedef int int_t; -} } - -namespace remove_const{ -namespace before{ - - typedef const void x1; - typedef const incomplete_type x2; - typedef int* const x3; - typedef int* volatile x4; -} - -namespace after{ - typedef void x1; - typedef incomplete_type x2; - typedef int* x3; - typedef int* volatile x4; -} } - -namespace is_volatile{ -namespace yes{ - - typedef void * volatile vvoid_ptr_t; - typedef volatile int volatile_int_t; -} - -namespace no{ - typedef int* int_ptr_t; - typedef const int* const_int_ptr_t; - typedef int* volatile_int_ptr_t; - typedef some_struct_t* some_struct_ptr_t; - typedef int* int_volatile_ptr_t; - typedef void(*function_t)(); - typedef void (some_struct_t::*member_function_t)(); - typedef int int_t; -} } - -namespace remove_volatile{ -namespace before{ - - typedef void * volatile x1; - typedef volatile int x2; - typedef int* x3; -} - -namespace after{ - typedef void * x1; - typedef int x2; - typedef int* x3; -} } - - -namespace remove_cv{ -namespace before{ - - typedef void * volatile x10; - typedef void * const volatile x11; - typedef void * const x12; - - typedef volatile int x20; - typedef const volatile int x21; - typedef const int x22; - - typedef int* volatile x30; - typedef int* const volatile x31; - typedef int* const x32; - - typedef void(*x40)(); -} - -namespace after{ - typedef void * x10; - typedef void * x11; - typedef void * x12; - - typedef int x20; - typedef int x21; - typedef int x22; - - typedef int* x30; - typedef int* x31; - typedef int* x32; - - typedef void(*x40)(); -} } - - -namespace is_enum{ - - enum color{ red, green, blue }; - -namespace yes{ - typedef color COLOR; -} - -namespace no{ - typedef int* int_ptr_t; - typedef const int* const_int_ptr_t; - typedef int* volatile_int_ptr_t; - typedef some_struct_t* some_struct_ptr_t; - typedef int* int_volatile_ptr_t; - typedef void(*function_t)(); - typedef void (some_struct_t::*member_function_t)(); - typedef int int_t; -} } - -namespace has_trivial_constructor{ -namespace yes{ - struct x{ - x(){} - }; -} - -namespace no{ - class y{ - private: - y(){} - }; -} } - -namespace has_public_constructor{ -namespace yes{ - struct x{ - x(){} - }; -} - -namespace no{ - class y{ - private: - y(){} - }; -} } - -namespace has_public_destructor{ -namespace yes{ - struct x{ - ~x(){} - }; -} - -namespace no{ - class y{ - private: - ~y(){} - }; -} } - -namespace has_trivial_copy{ -namespace yes{ - struct x{ - x(const x&){} - }; -} - -namespace no{ - class y{ - private: - y(const y&){} - }; -} } - -namespace is_base_and_derived{ -namespace yes{ - struct base{}; - struct derived : public base {}; -} - -namespace no{ - struct unrelated1{}; - struct unrelated2{}; -} } - -namespace has_any_non_copyconstructor{ -namespace yes{ - struct x{ - x(int){} - }; -} - -namespace no{ - class y{ - private: - y(){} - }; -} } - -namespace is_unary_operator{ - -struct dummy{ - bool operator!(){ return true; } - int operator++(){ return 0; } - int operator+(const dummy& ){ return 0; } -}; - -inline int operator++( dummy& ){ return 0; } -inline int operator*( const dummy&, const dummy& ){ return 0; } - -dummy& operator+=( dummy& x, const dummy& ){ - return x; -} - -} - -namespace is_array{ - -namespace yes{ - int yes1[2]; - const int yes2[2] = {0}; - const volatile int yes3[2] = {0}; - int yes4[2][3]; -} - -namespace no{ - typedef int no1; - typedef int* no2; - typedef const int* no3; - typedef const volatile int* no4; - typedef int*const no5; - typedef const int*volatile no6; - typedef const volatile int*const no7; - typedef void( * no8)( const int[2] ); -} } - -namespace is_convertible{ - -template <class T> -struct convertible_from{ - convertible_from(T); -}; - -template <class T> -struct convertible_to{ - operator T (); - -}; - -struct base{}; - -struct other{}; - -struct derived : base {}; - -struct derived_protected : protected base {}; - -struct derived_private : private base {}; - -struct base2{}; - -struct middle2 : virtual base2 {}; - -struct derived2 : middle2 {}; - -enum fruit{ apple }; - -template < typename source_type_, typename target_type_, int value_ > -struct tester_t{ - typedef source_type_ source_type; - typedef target_type_ target_type; - enum expected{ value=value_ }; -}; - -template < typename source_type_, typename target_type_, int value_ > -struct tester_source_t{ - typedef source_type_ source_type; - typedef target_type_ target_type; - enum expected{ value=value_ }; - -private: - enum { sizeof_source = sizeof( source_type ) }; -}; - -template < typename source_type_, typename target_type_, int value_ > -struct tester_target_t{ - typedef source_type_ source_type; - typedef target_type_ target_type; - enum expected{ value=value_ }; - -private: - enum { sizeof_target = sizeof( target_type ) }; -}; - -template < typename source_type_, typename target_type_, int value_ > -struct tester_both_t{ - typedef source_type_ source_type; - typedef target_type_ target_type; - enum expected{ value=value_ }; - -private: - enum { sizeof_source = sizeof( source_type ) }; - enum { sizeof_target = sizeof( target_type ) }; -}; - -struct x1 : public tester_t< const int *, int*, false >{}; -struct x2 : public tester_t< int *, const int*, true >{}; -struct x3 : public tester_t< const int&, int&, false >{}; -struct x4 : public tester_t< const int&, int, true >{}; -struct x5 : public tester_t< const int&, char, true >{}; -struct x6 : public tester_t< const int&, char&, false >{}; -struct x7 : public tester_t< const int&, char*, false >{}; -struct x8 : public tester_t< int&, const int&, true >{}; -struct x9 : public tester_t< int *, const int*, true >{}; -struct x10 : public tester_t< int&, const int&, true >{}; -struct x11 : public tester_t< float, int, true >{}; -struct x12 : public tester_t< double, int, true >{}; -struct x13 : public tester_t< double, float, true >{}; -struct x14 : public tester_t< long, int, true >{}; -struct x15 : public tester_t< int, char, true >{}; -struct x16 : public tester_t< long long, int, true >{}; -struct x17 : public tester_t< long long, char, true >{}; -struct x18 : public tester_t< long long, float, true >{}; -struct x19 : public tester_t< float, int, true >{}; -struct x20 : public tester_t< float, void, false >{}; -struct x21 : public tester_t< void, void, true >{}; -struct x22 : public tester_t< double, void*, true >{}; -struct x23 : public tester_t< double, int*, false >{}; -struct x24 : public tester_t< int, int*, false >{}; -struct x25 : public tester_t< const int, int*, false >{}; -struct x26 : public tester_t< const int&, int*, false >{}; -struct x27 : public tester_t< double*, int*, false >{}; -struct x28 : public tester_source_t< convertible_to<int>, int, true >{}; -struct x29 : public tester_target_t< int, convertible_to<int>, false >{}; -struct x30 : public tester_source_t< convertible_to<float const&>, float, true >{}; -struct x31 : public tester_target_t< float, convertible_to<float const&>, false >{}; -struct x32 : public tester_source_t< convertible_to<float&>, float, true >{}; -struct x33 : public tester_target_t< float, convertible_to<float&>, false >{}; -struct x34 : public tester_source_t< convertible_to<char>, float, true >{}; -struct x35 : public tester_target_t< float, convertible_to<char>, false >{}; -struct x36 : public tester_source_t< convertible_to<char const&>, float, true >{}; -struct x37 : public tester_target_t< float, convertible_to<char const&>, false >{}; -struct x38 : public tester_source_t< convertible_to<char&>, float, true >{}; -struct x39 : public tester_target_t< float, convertible_to<char&>, false >{}; -struct x40 : public tester_source_t< convertible_to<char>, char, true >{}; -struct x41 : public tester_source_t< convertible_to<char const&>, char, true >{}; -struct x42 : public tester_source_t< convertible_to<char&>, char, true >{}; -struct x43 : public tester_source_t< convertible_to<float>, float&, true >{}; -struct x44 : public tester_source_t< convertible_to<float>, float const&, true >{}; -struct x45 : public tester_source_t< convertible_to<float&>, float&, true >{}; -struct x46 : public tester_source_t< convertible_to<float const&>, float const&, true >{}; -struct x47 : public tester_source_t< convertible_to<float const&>, float&, false >{}; -struct x48 : public tester_target_t< float, convertible_from<float>, true >{}; -struct x49 : public tester_target_t< float, convertible_from<float const&>, true >{}; -struct x50 : public tester_target_t< float, convertible_from<float&>, true >{}; -struct x51 : public tester_target_t< float, convertible_from<char>, true >{}; -struct x52 : public tester_target_t< float, convertible_from<char const&>, true >{}; -struct x53 : public tester_target_t< float, convertible_from<char&>, false >{}; -struct x54 : public tester_target_t< char, convertible_from<char>, true >{}; -struct x55 : public tester_target_t< char, convertible_from<char const&>, true >{}; -struct x56 : public tester_target_t< char, convertible_from<char&>, true >{}; -struct x57 : public tester_target_t< float&, convertible_from<float> , true >{}; -struct x58 : public tester_target_t< float const&, convertible_from<float> , true >{}; -struct x59 : public tester_target_t< float&, convertible_from<float&> , true >{}; -struct x60 : public tester_target_t< float const&, convertible_from<float const&>, true >{}; -struct x61 : public tester_target_t< float&, convertible_from<float const&>, true >{}; -struct x62 : public tester_target_t< int, convertible_from<int>, true >{}; -struct x63 : public tester_t< const int*, int[3], false >{}; -struct x64 : public tester_t< int(&)[4], const int*, true >{}; -struct x65 : public tester_t< int(&)(int), int(*)(int), true >{}; -struct x66 : public tester_t< int[2], int*, true >{}; -struct x67 : public tester_t< int[2], const int*, true >{}; -struct x68 : public tester_t< const int[2], int*, false >{}; -struct x69 : public tester_t< int*, int[3], false >{}; -struct x70 : public tester_t< float, int&, false >{}; -struct x71 : public tester_t< float, const int&, true >{}; -struct x72 : public tester_t< other, void*, true >{}; -struct x73 : public tester_t< int, void*, false >{}; -struct x74 : public tester_t< fruit, void*, false >{}; -struct x75 : public tester_t< other, int*, false >{}; -struct x76 : public tester_t< other*, int*, false >{}; -struct x77 : public tester_t< fruit, int, true >{}; -struct x78 : public tester_t< fruit, double, true >{}; -struct x79 : public tester_t< fruit, char, true >{}; -struct x80 : public tester_t< fruit, wchar_t, true >{}; -struct x81 : public tester_t< derived, base, true >{}; -struct x82 : public tester_t< derived, derived, true >{}; -struct x83 : public tester_t< base, base, true >{}; -struct x84 : public tester_t< base, derived, false >{}; -struct x85 : public tester_t< other, base, false >{}; -struct x86 : public tester_t< middle2, base2, true >{}; -struct x87 : public tester_t< derived2, base2, true >{}; -struct x88 : public tester_t< derived*, base*, true >{}; -struct x89 : public tester_t< base*, derived*, false >{}; -struct x90 : public tester_t< derived&, base&, true >{}; -struct x91 : public tester_t< base&, derived&, false >{}; -struct x92 : public tester_t< const derived*, const base*, true >{}; -struct x93 : public tester_t< const base*, const derived*, false >{}; -struct x94 : public tester_t< const derived&, const base&, true >{}; -struct x95 : public tester_t< const base&, const derived&, false >{}; -struct x96 : public tester_t< derived_private, base, false >{}; -struct x97 : public tester_t< derived_protected, base, true >{}; -struct x98 : public tester_t< derived_protected, derived_private, false >{}; - - - -// : public tester_t< test_abc3, const test_abc1&, true >{}; -// : public tester_t< non_int_pointer, void*, true >{}; -// : public tester_t< test_abc1&, test_abc2&, false >{}; -// : public tester_t< test_abc1&, int_constructible, false >{}; -// : public tester_t< int_constructible, test_abc1&, false >{}; -// : public tester_t< test_abc1&, test_abc2, false >{}; - -//~ : public tester_t< polymorphic_derived1,polymorphic_base, true >{}; -//~ : public tester_t< polymorphic_derived2,polymorphic_base, true >{}; -//~ : public tester_t< polymorphic_base,polymorphic_derived1, false >{}; -//~ : public tester_t< polymorphic_base,polymorphic_derived2, false >{}; -//~ #ifndef BOOST_NO_IS_ABSTRACT -//~ : public tester_t< test_abc1,test_abc1, false >{}; -//~ : public tester_t< Base,test_abc1, false >{}; -//~ : public tester_t< polymorphic_derived2,test_abc1, false >{}; -//~ : public tester_t< int,test_abc1, false >{}; -//~ #endif - - -} - - - - - - - - - - - - - - - - - - - +// Copyright 2004 Roman Yakovenko. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +//Almost all test cases have been taken +//from boost.type_traits (http://www.boost.org) library. + +#include <string> +#include <iostream> + +#define TYPE_PERMUTATION( BASE, NAME ) \ + typedef BASE NAME##_t; \ + typedef BASE const NAME##_const_t; \ + typedef BASE volatile NAME##_volatile_t; + +struct some_struct_t{ + void do_smth(); + int member; +}; + +namespace is_std_ostream{ +namespace yes{ + typedef std::ostream ostream_type; +} +namespace no{ + typedef int int__; +} +} + +namespace is_std_wostream{ +namespace yes{ + typedef std::wostream wostream_type; +} +namespace no{ + typedef int int__; +} +} + + +struct incomplete_type; + +namespace is_void{ +namespace yes{ + typedef void void_t; + typedef void const void_cont_t; + typedef void volatile void_volatile_t; +} +namespace no{ + typedef void* void_ptr_t; + typedef int int_t; + typedef some_struct_t some_struct_alias_t; + typedef incomplete_type incomplete_type_alias_t; + typedef void(*function_t)(); + typedef void (some_struct_t::*member_function_t)(); +} } + +namespace is_noncopyable{ + +namespace detail{ + struct x{ + private: + x( const x& ); + x& operator=(const x& ); + }; + + struct y_type{ + union { + struct { + float x, y, z; + }; + float val[3]; + }; + + static const y_type zero; + }; +} + +namespace yes{ + typedef detail::x x; +} +namespace no{ + typedef std::string string_type; + typedef detail::y_type y_type; +} +} + +namespace is_integral{ +namespace yes{ + + TYPE_PERMUTATION( bool, bool ) + TYPE_PERMUTATION( char, char ) + TYPE_PERMUTATION( unsigned char, uchar ) + TYPE_PERMUTATION( short, short ) + TYPE_PERMUTATION( unsigned short, ushort ) + TYPE_PERMUTATION( int, int ) + TYPE_PERMUTATION( unsigned int, uint ) + TYPE_PERMUTATION( long, long ) + TYPE_PERMUTATION( unsigned long, ulong ) + TYPE_PERMUTATION( long long int, llint ) + TYPE_PERMUTATION( long long unsigned int, ulli ) +} +namespace no{ + typedef some_struct_t some_struct_alias_t; + typedef float* float_ptr_t; + typedef float& float_ref_t; + typedef const float& const_float_ref_t; + typedef incomplete_type incomplete_type_alias; + typedef void(*function_t)(); + typedef void (some_struct_t::*member_function_t)(); + TYPE_PERMUTATION( void, void ) + TYPE_PERMUTATION( float, float ) + TYPE_PERMUTATION( double, double ) + TYPE_PERMUTATION( long double, ldouble ) +} } + +namespace is_floating_point{ +namespace yes{ + + TYPE_PERMUTATION( float, float ) + TYPE_PERMUTATION( double, double ) + TYPE_PERMUTATION( long double, ldouble ) +} +namespace no{ + typedef some_struct_t some_struct_alias_t; + typedef float* float_ptr_t; + typedef float& float_ref_t; + typedef const float& const_float_ref_t; + typedef incomplete_type incomplete_type_alias; + typedef void(*function_t)(); + typedef void (some_struct_t::*member_function_t)(); + TYPE_PERMUTATION( void, void ) + TYPE_PERMUTATION( bool, bool ) + TYPE_PERMUTATION( char, char ) + TYPE_PERMUTATION( unsigned char, uchar ) + TYPE_PERMUTATION( short, short ) + TYPE_PERMUTATION( unsigned short, ushort ) + TYPE_PERMUTATION( int, int ) + TYPE_PERMUTATION( unsigned int, uint ) + TYPE_PERMUTATION( long, long ) + TYPE_PERMUTATION( unsigned long, ulong ) + TYPE_PERMUTATION( long long int, llint ) + TYPE_PERMUTATION( long long unsigned int, ulli ) +} } + +namespace is_fundamental{ +namespace yes{ + +#define FUNDAMENTAL_TYPE_PERMUTATION( BASE, NAME ) \ + typedef BASE NAME##_t; \ + typedef BASE const NAME##_const_t; \ + typedef BASE volatile NAME##_volatile_t; + + TYPE_PERMUTATION( void, void ) + TYPE_PERMUTATION( bool, bool ) + TYPE_PERMUTATION( char, char ) + TYPE_PERMUTATION( unsigned char, uchar ) + TYPE_PERMUTATION( short, short ) + TYPE_PERMUTATION( unsigned short, ushort ) + TYPE_PERMUTATION( int, int ) + TYPE_PERMUTATION( unsigned int, uint ) + TYPE_PERMUTATION( long, long ) + TYPE_PERMUTATION( unsigned long, ulong ) + TYPE_PERMUTATION( long long int, llint ) + TYPE_PERMUTATION( long long unsigned int, ulli ) + TYPE_PERMUTATION( float, float ) + TYPE_PERMUTATION( double, double ) + TYPE_PERMUTATION( long double, ldouble ) +} +namespace no{ + typedef some_struct_t some_struct_alias_t; + typedef float* float_ptr_t; + typedef float& float_ref_t; + typedef const float& const_float_ref_t; + typedef incomplete_type incomplete_type_alias; + typedef void(*function_t)(); + typedef void (some_struct_t::*member_function_t)(); + +} } + +namespace is_pointer{ +namespace yes{ + typedef int* int_ptr_t; + typedef const int* const_int_ptr_t; + typedef volatile int* volatile_int_ptr_t; + typedef some_struct_t* some_struct_ptr_t; + typedef int* const int_const_ptr_t; + typedef int* volatile int_volatile_ptr_t; + typedef void(*function_t)(); + typedef void (some_struct_t::*member_function_t)(); +} + +namespace no{ + typedef int int_t; + typedef int& int_ref_t; + typedef some_struct_t some_struct_alias_t; + typedef int*& int_ptr_ref_t; +} } + + +namespace remove_pointer{ +namespace before{ + typedef int* x1; + typedef const int* x2; + typedef volatile int* x3; + typedef some_struct_t* x4; + typedef int* const x5; + typedef int* volatile x6; + typedef void(*x7)(); + typedef void (some_struct_t::*x8)(); +} + +namespace after{ + typedef int x1; + typedef const int x2; + typedef volatile int x3; + typedef some_struct_t x4; + typedef int const x5; + typedef int volatile x6; + typedef void(*x7)(); + typedef void (some_struct_t::*x8)(); +} } + + +namespace is_reference{ +namespace yes{ + + typedef int& int_ref_t; + typedef const int& const_int_ref_t; + typedef int const& int_const_ref_t; + typedef some_struct_t& some_struct_ref_t; + typedef int*& int_ptr_ref_t; +} + +namespace no{ + typedef int* int_ptr_t; + typedef const int* const_int_ptr_t; + typedef volatile int* volatile_int_ptr_t; + typedef some_struct_t* some_struct_ptr_t; + typedef int* const int_const_ptr_t; + typedef int* volatile int_volatile_ptr_t; + typedef void(*function_t)(); + typedef void (some_struct_t::*member_function_t)(); + typedef int int_t; +} } + +namespace remove_reference{ +namespace before{ + + typedef int& x1; + typedef const int& x2; + typedef some_struct_t& x3; + typedef int*& x4; + typedef void (some_struct_t::*x5)(); +} + +namespace after{ + typedef int x1; + typedef const int x2; + typedef some_struct_t x3; + typedef int* x4; + typedef void (some_struct_t::*x5)(); +} } + +namespace is_const{ +namespace yes{ + + typedef const void const_void_t; + typedef const incomplete_type const_incomplete_type_t; + typedef int* const int_const_t; + //TODO typedef const int& const_int_ref_t; +} + +namespace no{ + typedef int* int_ptr_t; + typedef const int* const_int_ptr_t; + typedef volatile int* volatile_int_ptr_t; + typedef some_struct_t* some_struct_ptr_t; + typedef int* volatile int_volatile_ptr_t; + typedef void(*function_t)(); + typedef void (some_struct_t::*member_function_t)(); + typedef int int_t; +} } + +namespace remove_const{ +namespace before{ + + typedef const void x1; + typedef const incomplete_type x2; + typedef int* const x3; + typedef int* volatile x4; +} + +namespace after{ + typedef void x1; + typedef incomplete_type x2; + typedef int* x3; + typedef int* volatile x4; +} } + +namespace is_volatile{ +namespace yes{ + + typedef void * volatile vvoid_ptr_t; + typedef volatile int volatile_int_t; +} + +namespace no{ + typedef int* int_ptr_t; + typedef const int* const_int_ptr_t; + typedef int* volatile_int_ptr_t; + typedef some_struct_t* some_struct_ptr_t; + typedef int* int_volatile_ptr_t; + typedef void(*function_t)(); + typedef void (some_struct_t::*member_function_t)(); + typedef int int_t; +} } + +namespace remove_volatile{ +namespace before{ + + typedef void * volatile x1; + typedef volatile int x2; + typedef int* x3; +} + +namespace after{ + typedef void * x1; + typedef int x2; + typedef int* x3; +} } + + +namespace remove_cv{ +namespace before{ + + typedef void * volatile x10; + typedef void * const volatile x11; + typedef void * const x12; + + typedef volatile int x20; + typedef const volatile int x21; + typedef const int x22; + + typedef int* volatile x30; + typedef int* const volatile x31; + typedef int* const x32; + + typedef void(*x40)(); +} + +namespace after{ + typedef void * x10; + typedef void * x11; + typedef void * x12; + + typedef int x20; + typedef int x21; + typedef int x22; + + typedef int* x30; + typedef int* x31; + typedef int* x32; + + typedef void(*x40)(); +} } + + +namespace is_enum{ + + enum color{ red, green, blue }; + +namespace yes{ + typedef color COLOR; +} + +namespace no{ + typedef int* int_ptr_t; + typedef const int* const_int_ptr_t; + typedef int* volatile_int_ptr_t; + typedef some_struct_t* some_struct_ptr_t; + typedef int* int_volatile_ptr_t; + typedef void(*function_t)(); + typedef void (some_struct_t::*member_function_t)(); + typedef int int_t; +} } + +namespace has_trivial_constructor{ +namespace yes{ + struct x{ + x(){} + }; +} + +namespace no{ + class y{ + private: + y(){} + }; +} } + +namespace has_public_constructor{ +namespace yes{ + struct x{ + x(){} + }; +} + +namespace no{ + class y{ + private: + y(){} + }; +} } + +namespace has_public_destructor{ +namespace yes{ + struct x{ + ~x(){} + }; +} + +namespace no{ + class y{ + private: + ~y(){} + }; +} } + +namespace has_trivial_copy{ +namespace yes{ + struct x{ + x(const x&){} + }; +} + +namespace no{ + class y{ + private: + y(const y&){} + }; +} } + +namespace is_base_and_derived{ +namespace yes{ + struct base{}; + struct derived : public base {}; +} + +namespace no{ + struct unrelated1{}; + struct unrelated2{}; +} } + +namespace has_any_non_copyconstructor{ +namespace yes{ + struct x{ + x(int){} + }; +} + +namespace no{ + class y{ + private: + y(){} + }; +} } + +namespace is_unary_operator{ + +struct dummy{ + bool operator!(){ return true; } + int operator++(){ return 0; } + int operator+(const dummy& ){ return 0; } +}; + +inline int operator++( dummy& ){ return 0; } +inline int operator*( const dummy&, const dummy& ){ return 0; } + +dummy& operator+=( dummy& x, const dummy& ){ + return x; +} + +} + +namespace is_array{ + +namespace yes{ + int yes1[2]; + const int yes2[2] = {0}; + const volatile int yes3[2] = {0}; + int yes4[2][3]; +} + +namespace no{ + typedef int no1; + typedef int* no2; + typedef const int* no3; + typedef const volatile int* no4; + typedef int*const no5; + typedef const int*volatile no6; + typedef const volatile int*const no7; + typedef void( * no8)( const int[2] ); +} } + +namespace is_convertible{ + +template <class T> +struct convertible_from{ + convertible_from(T); +}; + +template <class T> +struct convertible_to{ + operator T (); + +}; + +struct base{}; + +struct other{}; + +struct derived : base {}; + +struct derived_protected : protected base {}; + +struct derived_private : private base {}; + +struct base2{}; + +struct middle2 : virtual base2 {}; + +struct derived2 : middle2 {}; + +enum fruit{ apple }; + +template < typename source_type_, typename target_type_, int value_ > +struct tester_t{ + typedef source_type_ source_type; + typedef target_type_ target_type; + enum expected{ value=value_ }; +}; + +template < typename source_type_, typename target_type_, int value_ > +struct tester_source_t{ + typedef source_type_ source_type; + typedef target_type_ target_type; + enum expected{ value=value_ }; + +private: + enum { sizeof_source = sizeof( source_type ) }; +}; + +template < typename source_type_, typename target_type_, int value_ > +struct tester_target_t{ + typedef source_type_ source_type; + typedef target_type_ target_type; + enum expected{ value=value_ }; + +private: + enum { sizeof_target = sizeof( target_type ) }; +}; + +template < typename source_type_, typename target_type_, int value_ > +struct tester_both_t{ + typedef source_type_ source_type; + typedef target_type_ target_type; + enum expected{ value=value_ }; + +private: + enum { sizeof_source = sizeof( source_type ) }; + enum { sizeof_target = sizeof( target_type ) }; +}; + +struct x1 : public tester_t< const int *, int*, false >{}; +struct x2 : public tester_t< int *, const int*, true >{}; +struct x3 : public tester_t< const int&, int&, false >{}; +struct x4 : public tester_t< const int&, int, true >{}; +struct x5 : public tester_t< const int&, char, true >{}; +struct x6 : public tester_t< const int&, char&, false >{}; +struct x7 : public tester_t< const int&, char*, false >{}; +struct x8 : public tester_t< int&, const int&, true >{}; +struct x9 : public tester_t< int *, const int*, true >{}; +struct x10 : public tester_t< int&, const int&, true >{}; +struct x11 : public tester_t< float, int, true >{}; +struct x12 : public tester_t< double, int, true >{}; +struct x13 : public tester_t< double, float, true >{}; +struct x14 : public tester_t< long, int, true >{}; +struct x15 : public tester_t< int, char, true >{}; +struct x16 : public tester_t< long long, int, true >{}; +struct x17 : public tester_t< long long, char, true >{}; +struct x18 : public tester_t< long long, float, true >{}; +struct x19 : public tester_t< float, int, true >{}; +struct x20 : public tester_t< float, void, false >{}; +struct x21 : public tester_t< void, void, true >{}; +struct x22 : public tester_t< double, void*, true >{}; +struct x23 : public tester_t< double, int*, false >{}; +struct x24 : public tester_t< int, int*, false >{}; +struct x25 : public tester_t< const int, int*, false >{}; +struct x26 : public tester_t< const int&, int*, false >{}; +struct x27 : public tester_t< double*, int*, false >{}; +struct x28 : public tester_source_t< convertible_to<int>, int, true >{}; +struct x29 : public tester_target_t< int, convertible_to<int>, false >{}; +struct x30 : public tester_source_t< convertible_to<float const&>, float, true >{}; +struct x31 : public tester_target_t< float, convertible_to<float const&>, false >{}; +struct x32 : public tester_source_t< convertible_to<float&>, float, true >{}; +struct x33 : public tester_target_t< float, convertible_to<float&>, false >{}; +struct x34 : public tester_source_t< convertible_to<char>, float, true >{}; +struct x35 : public tester_target_t< float, convertible_to<char>, false >{}; +struct x36 : public tester_source_t< convertible_to<char const&>, float, true >{}; +struct x37 : public tester_target_t< float, convertible_to<char const&>, false >{}; +struct x38 : public tester_source_t< convertible_to<char&>, float, true >{}; +struct x39 : public tester_target_t< float, convertible_to<char&>, false >{}; +struct x40 : public tester_source_t< convertible_to<char>, char, true >{}; +struct x41 : public tester_source_t< convertible_to<char const&>, char, true >{}; +struct x42 : public tester_source_t< convertible_to<char&>, char, true >{}; +struct x43 : public tester_source_t< convertible_to<float>, float&, true >{}; +struct x44 : public tester_source_t< convertible_to<float>, float const&, true >{}; +struct x45 : public tester_source_t< convertible_to<float&>, float&, true >{}; +struct x46 : public tester_source_t< convertible_to<float const&>, float const&, true >{}; +struct x47 : public tester_source_t< convertible_to<float const&>, float&, false >{}; +struct x48 : public tester_target_t< float, convertible_from<float>, true >{}; +struct x49 : public tester_target_t< float, convertible_from<float const&>, true >{}; +struct x50 : public tester_target_t< float, convertible_from<float&>, true >{}; +struct x51 : public tester_target_t< float, convertible_from<char>, true >{}; +struct x52 : public tester_target_t< float, convertible_from<char const&>, true >{}; +struct x53 : public tester_target_t< float, convertible_from<char&>, false >{}; +struct x54 : public tester_target_t< char, convertible_from<char>, true >{}; +struct x55 : public tester_target_t< char, convertible_from<char const&>, true >{}; +struct x56 : public tester_target_t< char, convertible_from<char&>, true >{}; +struct x57 : public tester_target_t< float&, convertible_from<float> , true >{}; +struct x58 : public tester_target_t< float const&, convertible_from<float> , true >{}; +struct x59 : public tester_target_t< float&, convertible_from<float&> , true >{}; +struct x60 : public tester_target_t< float const&, convertible_from<float const&>, true >{}; +struct x61 : public tester_target_t< float&, convertible_from<float const&>, true >{}; +struct x62 : public tester_target_t< int, convertible_from<int>, true >{}; +struct x63 : public tester_t< const int*, int[3], false >{}; +struct x64 : public tester_t< int(&)[4], const int*, true >{}; +struct x65 : public tester_t< int(&)(int), int(*)(int), true >{}; +struct x66 : public tester_t< int[2], int*, true >{}; +struct x67 : public tester_t< int[2], const int*, true >{}; +struct x68 : public tester_t< const int[2], int*, false >{}; +struct x69 : public tester_t< int*, int[3], false >{}; +struct x70 : public tester_t< float, int&, false >{}; +struct x71 : public tester_t< float, const int&, true >{}; +struct x72 : public tester_t< other, void*, true >{}; +struct x73 : public tester_t< int, void*, false >{}; +struct x74 : public tester_t< fruit, void*, false >{}; +struct x75 : public tester_t< other, int*, false >{}; +struct x76 : public tester_t< other*, int*, false >{}; +struct x77 : public tester_t< fruit, int, true >{}; +struct x78 : public tester_t< fruit, double, true >{}; +struct x79 : public tester_t< fruit, char, true >{}; +struct x80 : public tester_t< fruit, wchar_t, true >{}; +struct x81 : public tester_t< derived, base, true >{}; +struct x82 : public tester_t< derived, derived, true >{}; +struct x83 : public tester_t< base, base, true >{}; +struct x84 : public tester_t< base, derived, false >{}; +struct x85 : public tester_t< other, base, false >{}; +struct x86 : public tester_t< middle2, base2, true >{}; +struct x87 : public tester_t< derived2, base2, true >{}; +struct x88 : public tester_t< derived*, base*, true >{}; +struct x89 : public tester_t< base*, derived*, false >{}; +struct x90 : public tester_t< derived&, base&, true >{}; +struct x91 : public tester_t< base&, derived&, false >{}; +struct x92 : public tester_t< const derived*, const base*, true >{}; +struct x93 : public tester_t< const base*, const derived*, false >{}; +struct x94 : public tester_t< const derived&, const base&, true >{}; +struct x95 : public tester_t< const base&, const derived&, false >{}; +struct x96 : public tester_t< derived_private, base, false >{}; +struct x97 : public tester_t< derived_protected, base, true >{}; +struct x98 : public tester_t< derived_protected, derived_private, false >{}; + + + +// : public tester_t< test_abc3, const test_abc1&, true >{}; +// : public tester_t< non_int_pointer, void*, true >{}; +// : public tester_t< test_abc1&, test_abc2&, false >{}; +// : public tester_t< test_abc1&, int_constructible, false >{}; +// : public tester_t< int_constructible, test_abc1&, false >{}; +// : public tester_t< test_abc1&, test_abc2, false >{}; + +//~ : public tester_t< polymorphic_derived1,polymorphic_base, true >{}; +//~ : public tester_t< polymorphic_derived2,polymorphic_base, true >{}; +//~ : public tester_t< polymorphic_base,polymorphic_derived1, false >{}; +//~ : public tester_t< polymorphic_base,polymorphic_derived2, false >{}; +//~ #ifndef BOOST_NO_IS_ABSTRACT +//~ : public tester_t< test_abc1,test_abc1, false >{}; +//~ : public tester_t< Base,test_abc1, false >{}; +//~ : public tester_t< polymorphic_derived2,test_abc1, false >{}; +//~ : public tester_t< int,test_abc1, false >{}; +//~ #endif + + +} + + + + + + + + + + + + + + + + + + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |