112a9d9c8Sopenharmony_ci// bindgen-flags: --rust-target 1.0 -- -std=c++11
212a9d9c8Sopenharmony_ci
312a9d9c8Sopenharmony_citypedef unsigned char uint8_t;
412a9d9c8Sopenharmony_citypedef int int32_t;
512a9d9c8Sopenharmony_ci
612a9d9c8Sopenharmony_citemplate<typename T>
712a9d9c8Sopenharmony_cistruct StylePoint {
812a9d9c8Sopenharmony_ci  T x;
912a9d9c8Sopenharmony_ci  T y;
1012a9d9c8Sopenharmony_ci};
1112a9d9c8Sopenharmony_ci
1212a9d9c8Sopenharmony_citemplate<typename T>
1312a9d9c8Sopenharmony_ciunion StyleFoo {
1412a9d9c8Sopenharmony_ci  enum class Tag : uint8_t {
1512a9d9c8Sopenharmony_ci    Foo,
1612a9d9c8Sopenharmony_ci    Bar,
1712a9d9c8Sopenharmony_ci    Baz,
1812a9d9c8Sopenharmony_ci    Bazz,
1912a9d9c8Sopenharmony_ci  };
2012a9d9c8Sopenharmony_ci
2112a9d9c8Sopenharmony_ci  struct Foo_Body {
2212a9d9c8Sopenharmony_ci    Tag tag;
2312a9d9c8Sopenharmony_ci    int32_t x;
2412a9d9c8Sopenharmony_ci    StylePoint<T> y;
2512a9d9c8Sopenharmony_ci    StylePoint<float> z;
2612a9d9c8Sopenharmony_ci  };
2712a9d9c8Sopenharmony_ci
2812a9d9c8Sopenharmony_ci  struct Bar_Body {
2912a9d9c8Sopenharmony_ci    Tag tag;
3012a9d9c8Sopenharmony_ci    T _0;
3112a9d9c8Sopenharmony_ci  };
3212a9d9c8Sopenharmony_ci
3312a9d9c8Sopenharmony_ci  struct Baz_Body {
3412a9d9c8Sopenharmony_ci    Tag tag;
3512a9d9c8Sopenharmony_ci    StylePoint<T> _0;
3612a9d9c8Sopenharmony_ci  };
3712a9d9c8Sopenharmony_ci
3812a9d9c8Sopenharmony_ci  struct {
3912a9d9c8Sopenharmony_ci    Tag tag;
4012a9d9c8Sopenharmony_ci  };
4112a9d9c8Sopenharmony_ci  Foo_Body foo;
4212a9d9c8Sopenharmony_ci  Bar_Body bar;
4312a9d9c8Sopenharmony_ci  Baz_Body baz;
4412a9d9c8Sopenharmony_ci};
4512a9d9c8Sopenharmony_ci
4612a9d9c8Sopenharmony_citemplate<typename T>
4712a9d9c8Sopenharmony_cistruct StyleBar {
4812a9d9c8Sopenharmony_ci  enum class Tag {
4912a9d9c8Sopenharmony_ci    Bar1,
5012a9d9c8Sopenharmony_ci    Bar2,
5112a9d9c8Sopenharmony_ci    Bar3,
5212a9d9c8Sopenharmony_ci    Bar4,
5312a9d9c8Sopenharmony_ci  };
5412a9d9c8Sopenharmony_ci
5512a9d9c8Sopenharmony_ci  struct StyleBar1_Body {
5612a9d9c8Sopenharmony_ci    int32_t x;
5712a9d9c8Sopenharmony_ci    StylePoint<T> y;
5812a9d9c8Sopenharmony_ci    StylePoint<float> z;
5912a9d9c8Sopenharmony_ci  };
6012a9d9c8Sopenharmony_ci
6112a9d9c8Sopenharmony_ci  struct StyleBar2_Body {
6212a9d9c8Sopenharmony_ci    T _0;
6312a9d9c8Sopenharmony_ci  };
6412a9d9c8Sopenharmony_ci
6512a9d9c8Sopenharmony_ci  struct StyleBar3_Body {
6612a9d9c8Sopenharmony_ci    StylePoint<T> _0;
6712a9d9c8Sopenharmony_ci  };
6812a9d9c8Sopenharmony_ci
6912a9d9c8Sopenharmony_ci  Tag tag;
7012a9d9c8Sopenharmony_ci  union {
7112a9d9c8Sopenharmony_ci    StyleBar1_Body bar1;
7212a9d9c8Sopenharmony_ci    StyleBar2_Body bar2;
7312a9d9c8Sopenharmony_ci    StyleBar3_Body bar3;
7412a9d9c8Sopenharmony_ci  };
7512a9d9c8Sopenharmony_ci};
76