Parma_Polyhedra_Library::Is_Same_Or_Derived< Base, Derived > Struct Template Reference
[C++ Language Interface]

A class holding a constant called value that evaluates to true if and only if Base is the same type as Derived or Derived is a class derived from Base. More...

#include <meta_programming.hh>

Inheritance diagram for Parma_Polyhedra_Library::Is_Same_Or_Derived< Base, Derived >:
Inheritance graph
[legend]

List of all members.

Classes

struct  Any
 A class that is constructible from just anything. More...

Public Types

enum  anonymous_enum { value = (sizeof(func(derived_object())) == sizeof(char)) }

Public Member Functions

 PPL_COMPILE_TIME_CHECK (sizeof(char)!=sizeof(double),"architecture with sizeof(char) == sizeof(double)"" (!?)")

Static Public Member Functions

static char func (const Base &)
 Overloading with Base.
static double func (Any)
 Overloading with Any.
static const Derived & derived_object ()
 A function obtaining a const reference to a Derived object.

Detailed Description

template<typename Base, typename Derived>
struct Parma_Polyhedra_Library::Is_Same_Or_Derived< Base, Derived >

A class holding a constant called value that evaluates to true if and only if Base is the same type as Derived or Derived is a class derived from Base.

Note:
Care must be taken to use this predicate with template classes. Suppose we have
  template <typename T> struct B;
  template <typename T> struct D : public B<T>;
Of course, we cannot test if, for some type variable U, we have Is_Same_Or_Derived<B<U>, Type>:: anonymous_enum:: value == true. But we can do as follows:
  struct B_Base {
  };

  template <typename T> struct B : public B_Base;
This enables us to enquire Is_Same_Or_Derived<B_Base, Type>:: anonymous_enum:: value.

Definition at line 224 of file meta_programming.hh.


Member Enumeration Documentation

template<typename Base, typename Derived>
enum Parma_Polyhedra_Library::Is_Same_Or_Derived::anonymous_enum
Enumerator:
value 

Assuming sizeof(char) != sizeof(double), the C++ overload resolution mechanism guarantees that value evaluates to true if and only if Base is the same type as Derived or Derived is a class derived from Base.

Definition at line 248 of file meta_programming.hh.

00248                       {
00256     value = (sizeof(func(derived_object())) == sizeof(char))
00257   };


Member Function Documentation

template<typename Base, typename Derived>
static const Derived& Parma_Polyhedra_Library::Is_Same_Or_Derived< Base, Derived >::derived_object (  )  [static]

A function obtaining a const reference to a Derived object.

template<typename Base, typename Derived>
static double Parma_Polyhedra_Library::Is_Same_Or_Derived< Base, Derived >::func ( Any   )  [static]

Overloading with Any.

template<typename Base, typename Derived>
static char Parma_Polyhedra_Library::Is_Same_Or_Derived< Base, Derived >::func ( const Base &   )  [static]

Overloading with Base.

template<typename Base, typename Derived>
Parma_Polyhedra_Library::Is_Same_Or_Derived< Base, Derived >::PPL_COMPILE_TIME_CHECK ( sizeof(char)!  = sizeof(double)  ) 

The documentation for this struct was generated from the following file:
Generated on Sun Feb 27 16:20:18 2011 for PPL by  doxygen 1.6.3