blob: 0426a5e9dfe80e26c559efa8a3bae0907aa7b9ea [file] [log] [blame]
/*
https://issues.dlang.org/show_bug.cgi?id=21219
REQUIRED_ARGS: -o- -HC
TEST_OUTPUT:
---
// Automatically generated by Digital Mars D Compiler
#pragma once
#include <assert.h>
#include <stddef.h>
#include <stdint.h>
#include <math.h>
#ifdef CUSTOM_D_ARRAY_TYPE
#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE
#else
/// Represents a D [] array
template<typename T>
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
#if !defined(_d_real)
#define _d_real long double
#endif
class ClassFromStruct final
{
public:
void foo();
ClassFromStruct()
{
}
};
class ClassFromClass
{
public:
virtual void foo();
};
struct StructFromStruct final
{
void foo();
StructFromStruct()
{
}
};
struct StructFromClass
{
virtual void foo();
};
struct Floats final
{
float f;
double d;
_d_real r;
double nan;
double inf;
double nInf;
Floats() :
f(1.23F),
d(4.56),
r(7.89L),
nan(NAN),
inf(INFINITY),
nInf(-INFINITY)
{
}
Floats(float f, double d = 4.56, _d_real r = 7.89L, double nan = NAN, double inf = INFINITY, double nInf = -INFINITY) :
f(f),
d(d),
r(r),
nan(nan),
inf(inf),
nInf(nInf)
{}
};
struct Null final
{
_d_dynamicArray< const char > null_;
Null() :
null_()
{
}
Null(_d_dynamicArray< const char > null_) :
null_(null_)
{}
};
struct Wrapper final
{
Null n1;
Null n2;
Wrapper() :
n1(Null({ 5, "Hello" })),
n2(Null({}))
{
}
Wrapper(Null n1, Null n2 = Null({})) :
n1(n1),
n2(n2)
{}
};
extern const _d_dynamicArray< const char > helloWorld;
---
*/
extern (C++, class) struct ClassFromStruct
{
void foo() {}
}
extern (C++, class) class ClassFromClass
{
void foo() {}
}
extern (C++, struct) struct StructFromStruct
{
void foo() {}
}
extern (C++, struct) class StructFromClass
{
void foo() {}
}
extern(C++) struct Floats
{
float f = 1.23f;
double d = 4.56;
real r = 7.89L;
double nan = double.nan;
double inf = double.infinity;
double nInf = -double.infinity;
}
extern (C++) struct Null
{
string null_ = null;
}
extern (C++) struct Wrapper
{
Null n1 = Null("Hello");
Null n2 = Null(null);
}
extern(C++) __gshared immutable string helloWorld = `"Hello\World!"`;