//  (C) Copyright John Maddock and Dave Abrahams 2002. 
//  Use, modification and distribution are subject to 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)

//  See http://www.boost.org/libs/config for most recent version.

//  MACRO:         BOOST_NO_IS_ABSTRACT
//  TITLE:         is_abstract implementation technique
//  DESCRIPTION:   Some compilers can't handle the code used for is_abstract even if they support SFINAE.


namespace boost_no_is_abstract{

#if defined(__CODEGEARC__)
template<class T>
struct is_abstract_test
{
   enum{ value = __is_abstract(T) };
};
#else
template<class T>
struct is_abstract_test
{
   // Deduction fails if T is void, function type,
   // reference type (14.8.2/2)or an abstract class type
   // according to review status issue #337
   //
   template<class U>
   static double check_sig(U (*)[1]);
   template<class U>
   static char check_sig(...);

#ifdef __GNUC__
   enum{ s1 = sizeof(is_abstract_test<T>::template check_sig<T>(0)) };
#else
   enum{ s1 = sizeof(check_sig<T>(0)) };
#endif

   enum{ value = (s1 == sizeof(char)) };
};
#endif

struct non_abstract{};
struct abstract{ virtual void foo() = 0; };

int test()
{
   return is_abstract_test<non_abstract>::value == is_abstract_test<abstract>::value;
}

}

