// bindgen-flags: --rust-target 1.0  --with-derive-hash --with-derive-partialeq --with-derive-eq --rustified-enum ".*"
// bindgen-flags: -- -std=c++11

class A {
    unsigned c;
    struct Segment { int begin, end; };
    union {
        int f;
    } named_union;
    union {
        int d;
    };
};

class B {
    unsigned d;
    struct Segment { int begin, end; };
};


enum class StepSyntax {
    Keyword,                     // step-start and step-end
    FunctionalWithoutKeyword,    // steps(...)
    FunctionalWithStartKeyword,  // steps(..., start)
    FunctionalWithEndKeyword,    // steps(..., end)
};

class C {
    unsigned d;
    union {
        struct {
            float mX1;
            float mY1;
            float mX2;
            float mY2;
        } mFunc;
        struct {
            StepSyntax mStepSyntax;
            unsigned int mSteps;
        };
    };
    // To ensure it doesn't collide
    struct Segment { int begin, end; };
};
