#pragma once

#include <stdtypedefs.h>

namespace std {
  class type_info {
  public:
    type_info(const type_info& rhs) = delete;
    virtual ~type_info();

    type_info &operator = (const type_info &rhs) = delete;

    bool operator ==(const type_info &rhs) const noexcept;
    bool operator !=(const type_info &rhs) const noexcept;
    bool before(const type_info &rhs) const noexcept;
    size_t hash_code() const noexcept;
    const char *name() const noexcept;
  };

  class bad_cast;
  class bad_typeid;
}
