/* REQUIRED_ARGS: -HC -c -o- PERMUTE_ARGS: TEST_OUTPUT: --- // Automatically generated by Digital Mars D Compiler #pragma once #include #include #include #include #ifdef CUSTOM_D_ARRAY_TYPE #define _d_dynamicArray CUSTOM_D_ARRAY_TYPE #else /// Represents a D [] array template struct _d_dynamicArray final { size_t length; T *ptr; _d_dynamicArray() : length(0), ptr(NULL) { } _d_dynamicArray(size_t length_in, T *ptr_in) : length(length_in), ptr(ptr_in) { } T& operator[](const size_t idx) { assert(idx < length); return ptr[idx]; } const T& operator[](const size_t idx) const { assert(idx < length); return ptr[idx]; } }; #endif struct S final { int8_t a; int32_t b; int64_t c; _d_dynamicArray< int32_t > arr; private: ~S(); public: S() : a(), b(), c(), arr() { } S(int8_t a, int32_t b = 0, int64_t c = 0LL, _d_dynamicArray< int32_t > arr = {}) : a(a), b(b), c(c), arr(arr) {} }; struct S2 final { int32_t a; int32_t b; int64_t c; S d; S2(int32_t a); S2(char ) = delete; S2() : a(42), b(), c() { } }; struct S3 final { int32_t a; int32_t b; int64_t c; S3() : a(42), b(), c() { } }; struct S4 final { int32_t a; int64_t b; int32_t c; int8_t d; S4() : a(), b(), c(), d() { } S4(int32_t a, int64_t b = 0LL, int32_t c = 0, int8_t d = 0) : a(a), b(b), c(c), d(d) {} }; #pragma pack(push, 1) struct Aligned final { int8_t a; int32_t b; int64_t c; Aligned(int32_t a); Aligned() : a(), b(), c() { } }; #pragma pack(pop) struct Null final { void* field; Null() : field(nullptr) { } Null(void* field) : field(field) {} }; struct A final { int32_t a; S s; void baz(int32_t x = 42); struct { int32_t x; int32_t y; }; union { int32_t u1; char u2[4$?:32=u|64=LLU$]; }; struct Inner final { int32_t x; Inner() : x() { } Inner(int32_t x) : x(x) {} }; typedef Inner I; class C; A() : a(), s(), x(), y() { } A(int32_t a, S s = S(), int32_t x = 0, int32_t y = 0) : a(a), s(s), x(x), y(y) {} }; union U { int32_t i; char c; }; struct Array final { uint32_t length; private: _d_dynamicArray< char > data; char smallarray[1$?:32=u|64=LLU$]; public: Array() : length(), data() { } Array(uint32_t length, _d_dynamicArray< char > data = {}) : length(length), data(data) {} }; struct Params final { bool obj; Array ddocfiles; Params() : obj(true), ddocfiles() { } Params(bool obj, Array ddocfiles = Array()) : obj(obj), ddocfiles(ddocfiles) {} }; --- */ /* StructDeclaration has the following issues: * align different than 1 does nothing; we should support align(n), where `n` in [1, 2, 4, 8, 16] * align(n): inside struct definition doesn’t add alignment, but breaks generation of default ctors */ extern (C++) struct S { byte a; int b; long c; int[] arr; extern(D) ~this() {} } extern (C++) struct S2 { int a = 42; int b; long c; S d = void; this(int a) {} extern(D) this(int, int, long) {} @disable this(char); } extern (C) struct S3 { int a = 42; int b; long c; this(int a) {} } extern (C) struct S4 { int a; long b; int c; byte d; } extern (C++) align(1) struct Aligned { //align(1): byte a; int b; long c; this(int a) {} } extern (C++) struct Null { void* field = null; } extern (C++) struct A { int a; S s; extern (D) void foo(); extern (C) void bar() {} extern (C++) void baz(int x = 42) {} struct { int x; int y; } union { int u1; char[4] u2; } struct Inner { int x; } alias I = Inner; extern(C++) class C; } extern(C++) union U { int i; char c; } extern (C++) struct Array { uint length; private: char[] data; char[1] smallarray; } extern (C++) struct Params { bool obj = true; Array ddocfiles; }