 // A lightweight class, with pointer-like methods, that contains an int
struct X
{
    int i_;

    constexpr const int &operator*() const { return i_; }
    constexpr int &operator*() { return i_; }
    constexpr const int *get() const { return &i_; }
    constexpr int *get() { return &i_; }
    constexpr const int *operator->() const { return &i_; }
    constexpr int *operator->() { return &i_; }

    constexpr X(int i) : i_(i) {}
};

struct XWithImplicitIntStarConversion
{
    int i_;

    constexpr const int &operator*() const { return i_; }
    constexpr int &operator*() { return i_; }
    constexpr const int *get() const { return &i_; }
    constexpr int *get() { return &i_; }
    constexpr const int *operator->() const { return &i_; }
    constexpr int *operator->() { return &i_; }
    constexpr operator int* () { return &i_; }

    constexpr XWithImplicitIntStarConversion(int i) : i_(i) {}
};

struct XWithImplicitConstIntStarConversion
{
    int i_;

    constexpr const int &operator*() const { return i_; }
    constexpr int &operator*() { return i_; }
    constexpr const int *get() const { return &i_; }
    constexpr int *get() { return &i_; }
    constexpr const int *operator->() const { return &i_; }
    constexpr int *operator->() { return &i_; }
    constexpr operator const int* () const { return &i_; }

    constexpr XWithImplicitConstIntStarConversion(int i) : i_(i) {}
};

struct ExplicitX
{
    int i_;

    constexpr const int &operator*() const { return i_; }
    constexpr int &operator*() { return i_; }
    constexpr const int *get() const { return &i_; }
    constexpr int *get() { return &i_; }
    constexpr const int *operator->() const { return &i_; }
    constexpr int *operator->() { return &i_; }

    constexpr explicit ExplicitX(int i) : i_(i) {}
};

struct MoveConstructibleFromX
{
    int i_;

    constexpr const int &operator*() const { return i_; }
    constexpr int &operator*() { return i_; }
    constexpr const int *get() const { return &i_; }
    constexpr int *get() { return &i_; }
    constexpr const int *operator->() const { return &i_; }
    constexpr int *operator->() { return &i_; }

    constexpr MoveConstructibleFromX(int i) : i_(i) {}
    constexpr MoveConstructibleFromX(X&& x) : i_(x.i_) {}
};

struct ExplicitMoveConstructibleFromX
{
    int i_;

    constexpr const int &operator*() const { return i_; }
    constexpr int &operator*() { return i_; }
    constexpr const int *get() const { return &i_; }
    constexpr int *get() { return &i_; }
    constexpr const int *operator->() const { return &i_; }
    constexpr int *operator->() { return &i_; }

    constexpr ExplicitMoveConstructibleFromX(int i) : i_(i) {}
    constexpr explicit ExplicitMoveConstructibleFromX(X&& x) : i_(x.i_) {}
};

struct CopyConstructibleFromX
{
    int i_;

    constexpr const int &operator*() const { return i_; }
    constexpr int &operator*() { return i_; }
    constexpr const int *get() const { return &i_; }
    constexpr int *get() { return &i_; }
    constexpr const int *operator->() const { return &i_; }
    constexpr int *operator->() { return &i_; }

    constexpr CopyConstructibleFromX(int i) : i_(i) {}
    constexpr CopyConstructibleFromX(const X& x) : i_(x.i_) {}
};

struct ExplicitCopyConstructibleFromX
{
    int i_;

    constexpr const int &operator*() const { return i_; }
    constexpr int &operator*() { return i_; }
    constexpr const int *get() const { return &i_; }
    constexpr int *get() { return &i_; }
    constexpr const int *operator->() const { return &i_; }
    constexpr int *operator->() { return &i_; }

    constexpr ExplicitCopyConstructibleFromX(int i) : i_(i) {}
    constexpr explicit ExplicitCopyConstructibleFromX(const X& x) : i_(x.i_) {}
};

