Search code examples
c++stdstd-variant

How to compare std::variant of custom classes?


1.It's my classes:

struct SymbolToken {
    std::string name;
};

struct QuoteToken {
};

struct ConstantToken {
    int value;
};

2. I have a following typedef:

typedef std::variant<SymbolToken, QuoteToken, ConstantToken> Token;

3. I wanna write an assert:

assert(Token{ConstantToken{4}} == Token{ConstantToken{4}}) // fine
assert(Token{ConstantToken{3}} == Token{ConstantToken{4}}) // exception

How can I implement it?


Solution

  • Implement == on the contained types.

    For Quote, always return true.

    Probably also implement != as a matter of sanity.