>"Daniel Frey" <[EMAIL PROTECTED]> wrote in message
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
>Rani Sharoni wrote:
>>
>> In the same fashion - I think that if type is not cv void, not reference
and
>> not convertible to bool (via standard conversion) then it's class type.

>Hm, could you show an implementation? [...]
Sure.

//
// Please implement using boost facilities
// is_reference, is_void, yes_type, no_type
// and BOOST_STATIC_ASSERT
//
template<typename T>
struct is_class
{
private:
    typedef char (&yes)[1];
    typedef char (&no) [2];

    struct boolcvt { boolcvt(bool); };

    static no  check(boolcvt);
    static yes check(...);

    static T& getT();
public:
    static const bool result =
        sizeof(check(getT())) == sizeof(yes);
};


template<typename T>
struct is_class<T&> {  static const bool result = false; };

// add cv void versions
template<>
struct is_class<void> {  static const bool result = false; };

// needed ? (EDG doesn't but VC7.1 does)
template<typename T>
struct is_class<T[]> {  static const bool result = false; };

struct A { operator bool(); };
union  U {};
enum   E {};

typedef int test[is_class<A>::result];
typedef int test[is_class<U>::result];
typedef int test[not is_class<E>::result];
typedef int test[not is_class<A(int,A)>::result];
typedef int test[not is_class<A&>::result];
typedef int test[not is_class<A[]>::result];

void f() {
    struct pitfall {};
    // is_class<pitfall>::result;
}

worked with VC7.1 and Comeau C/C++ 4.3.0.1

>> It might be useful implementation for compliers on which the SFIAE
technique
>> to detect class type doesn't work.

>What is SFIAE? [...]
I'm sorry, it should be SFINAE - substitution failure is not an error (but
elimination of function template or partial specialization from candidate
set).

> template< typename > no_type test( ... );
> template< typename T > yes_type test( void (T::*)() );

> stuff from Paul Mensonides?
Exactly.

Enjoy,
Rani




_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to