#pragma once class BaseValue { public: enum Kind { KD_Numeric, KD_Text, KD_DateTime, /// An unspecified type, otherwise known as "any" in some contexts. KindInvalid, KindCount = KindInvalid, }; private: Kind mKind; public: BaseValue(Kind kind); virtual ~BaseValue() = default; BaseValue(const BaseValue&) = delete; BaseValue& operator=(const BaseValue&) = delete; BaseValue(BaseValue&&) = default; BaseValue& operator=(BaseValue&&) = default; Kind GetKind() const; };