#ifndef TQT_ENUM_INHERITANCE_H
#define TQT_ENUM_INHERITANCE_H

template <typename EnumT, typename BaseEnumT>
class TQTInheritEnum
{
public:
  TQTInheritEnum() {}
  TQTInheritEnum(EnumT e)
    : enum_(e)
  {}

  TQTInheritEnum(BaseEnumT e)
    : baseEnum_(e)
  {}

  explicit TQTInheritEnum( int val )
    : enum_(static_cast<EnumT>(val))
  {}

  operator EnumT() const { return enum_; }
private:
  // Note - the value is declared as a union mainly for as a debugging aid. If 

  // the union is undesired and you have other methods of debugging, change it

  // to either of EnumT and do a cast for the constructor that accepts BaseEnumT.

  union
  { 
    EnumT enum_;
    BaseEnumT baseEnum_;
  };
};

#endif // TQT_ENUM_INHERITANCE_H