40 #ifndef INCLUDED_GLS_CPP_LANG_SUPPORT_H 
   41 #define INCLUDED_GLS_CPP_LANG_SUPPORT_H 
   69 #if defined( _MSC_VER ) 
   70 #    if _MSC_VER >= 1700 // >= VS2012 
   71 #        define DISTI_HAS_RVAL_REFS 
   72 #        define DISTI_HAS_METHOD_OVERRIDE 
   73 #        define DISTI_HAS_TYPE_TRAITS 
   74 #        define DISTI_HAS_STATIC_ASSERT 
   76 #    if _MSC_VER >= 1800 // >= VS2013 
   77 #        define DISTI_HAS_SPECIAL_MEM_FUN_DEL 
   82 #elif defined( __GNUC__ ) 
   84 #    if __cpp_rvalue_references >= 200610 || ( ( __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 3 ) ) && ( defined( __GXX_EXPERIMENTAL_CXX0X__ ) || __cplusplus >= 201103L ) ) 
   85 #        define DISTI_HAS_RVAL_REFS 
   87 #    if __cpp_static_assert >= 200410 && ( defined( __GXX_EXPERIMENTAL_CXX0X__ ) || __cplusplus >= 201103L ) 
   88 #        define DISTI_HAS_STATIC_ASSERT 
   90 #    if( __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 7 ) ) && ( defined( __GXX_EXPERIMENTAL_CXX0X__ ) || __cplusplus >= 201103L ) 
   91 #        define DISTI_HAS_METHOD_OVERRIDE 
   94 #        define DISTI_HAS_TYPE_TRAITS 
   96 #    if( __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 4 ) ) && ( defined( __GXX_EXPERIMENTAL_CXX0X__ ) || __cplusplus >= 201103L ) 
   97 #        define DISTI_HAS_SPECIAL_MEM_FUN_DEL 
  102 #elif defined( __clang__ ) 
  103 #    if __has_feature( cxx_rvalue_references ) 
  104 #        define DISTI_HAS_RVAL_REFS 
  106 #    if __has_feature( cxx_override_control ) 
  107 #        define DISTI_HAS_METHOD_OVERRIDE 
  109 #    if __has_feature( cxx_defaulted_functions ) && __has_feature( cxx_deleted_functions ) 
  110 #        define DISTI_HAS_SPECIAL_MEM_FUN_DEL 
  112 #    if __has_feature( cxx_static_assert ) 
  113 #        define DISTI_HAS_STATIC_ASSERT 
  117 #    define DISTI_HAS_TYPE_TRAITS 
  123 #ifdef DISTI_HAS_CPP11 // A single switch to enable everything since compiler is highly compliant 
  125 #    define DISTI_IF_HAS_CPP11( x ) x 
  126 #    define DISTI_IF_HAS_CPP11_ELSE( x, y ) x 
  128 #    define DISTI_HAS_RVAL_REFS 
  129 #    define DISTI_HAS_METHOD_OVERRIDE 
  130 #    define DISTI_HAS_SPECIAL_MEM_FUN_DEL 
  131 #    define DISTI_HAS_TYPE_TRAITS 
  132 #    define DISTI_HAS_STATIC_ASSERT 
  133 #else // Not fully C++11; some features may be enabled piecemeal 
  135 #    define DISTI_IF_HAS_CPP11( x ) 
  136 #    define DISTI_IF_HAS_CPP11_ELSE( x, y ) y 
  142 #if !defined( DISTI_NO_RVAL_REFS ) && defined( DISTI_HAS_RVAL_REFS ) 
  144 #    define DISTI_RVAL_MOVE( x ) std::move( x ) 
  145 #    define DISTI_IF_HAS_RVAL_REFS_ELSE( x, y ) x 
  147 #    undef DISTI_HAS_RVAL_REFS 
  148 #    define DISTI_RVAL_MOVE( x ) ( x ) 
  149 #    define DISTI_IF_HAS_RVAL_REFS_ELSE( x, y ) y 
  153 #if !defined( DISTI_NO_METHOD_OVERRIDE ) && defined( DISTI_HAS_METHOD_OVERRIDE ) 
  155 #    define DISTI_METHOD_OVERRIDE override 
  157 #    define DISTI_METHOD_FINAL final 
  159 #    undef DISTI_HAS_METHOD_OVERRIDE 
  160 #    define DISTI_METHOD_OVERRIDE 
  161 #    define DISTI_METHOD_FINAL 
  165 #if !defined( DISTI_NO_SPECIAL_MEM_FUN_DEL ) && defined( DISTI_HAS_SPECIAL_MEM_FUN_DEL ) 
  167 #    define DISTI_SPECIAL_MEM_FUN_DELETE = delete 
  169 #    undef DISTI_HAS_SPECIAL_MEM_FUN_DEL 
  170 #    define DISTI_SPECIAL_MEM_FUN_DELETE 
  174 #if !defined( DISTI_NO_TYPE_TRAITS ) && defined( DISTI_HAS_TYPE_TRAITS ) 
  177 #    define DISTI_IF_HAS_TYPE_TRAITS_ELSE( x, y ) x 
  179 #    undef DISTI_HAS_TYPE_TRAITS 
  180 #    define DISTI_IF_HAS_TYPE_TRAITS_ELSE( x, y ) y 
  186 namespace _cppLangSupportDetail
 
  202     template<
class T, 
class U>
 
  211         static Big   Test( ... );
 
  212         static Small Test( U );
 
  218             value = 
sizeof( Small ) == 
sizeof( ( Test( MakeT() ) ) )
 
  259 #if defined( DISTI_NO_STATIC_ASSERT ) 
  260 #    undef DISTI_HAS_STATIC_ASSERT 
  261 #    define DISTI_STATIC_ASSERT( expr, msg ) 
  263 #    define DISTI_PREPROC_STRINGIFY_HELPER( s ) #    s 
  264 #    define DISTI_PREPROC_STRINGIFY( s ) DISTI_PREPROC_STRINGIFY_HELPER( s ) 
  266 #    if defined( DISTI_HAS_STATIC_ASSERT ) 
  276 #        define DISTI_STATIC_ASSERT( expr, msg ) static_assert( expr, DISTI_PREPROC_STRINGIFY( msg ) ) 
  280 namespace _cppLangSupportDetail
 
  304 #        define DISTI_STATIC_ASSERT( expr, msg )                                                 \ 
  306                 ::disti::_cppLangSupportDetail::CompileTimeError<( ( expr ) != 0 )> ERROR_##msg; \ 
  320 #ifdef DISTI_HAS_TYPE_TRAITS 
  321 #    define DISTI_STATIC_ASSERT_IS_CONVERTIBLE_TO( T, ConvertsTo ) DISTI_STATIC_ASSERT( ( std::is_convertible<T*, ConvertsTo*>::value ), class_does_not_inherit_from_##ConvertsTo ); 
  323 #    define DISTI_STATIC_ASSERT_IS_CONVERTIBLE_TO( T, ConvertsTo ) DISTI_STATIC_ASSERT( (::disti::_cppLangSupportDetail::is_convertible<T*, ConvertsTo*>::value ), class_does_not_inherit_from_##ConvertsTo ) 
Replacement for std::is_convertible, adapted from Loki 0.1.7. 
Definition: gls_cpp_lang_support.h:203
Definition: gls_cpp_lang_support.h:285
Definition: bmpimage.h:46