blob: 700e9fd0eba4729c21717b53b7148b2d271fa0c3 [file] [log] [blame]
/*
RUN_OUTPUT:
---
Success
---
*/
import core.stdc.stdio;
class A
{
immutable size_t f;
this(T)(T z)
{
f = z.sizeof;
}
}
struct AS
{
immutable size_t f;
this(T)(T z)
{
f = z.sizeof;
}
}
void test0()
{
assert((new A(2.2)).f == double.sizeof);
assert((new A('g')).f == char.sizeof);
assert((AS(17)).f == int.sizeof);
assert((AS(null)).f == typeof(null).sizeof);
}
//------------------------------------------------------------------------------
class C
{
const int x;
const int y;
this(T...)(T z)
{
this.tupleof = z;
}
}
struct CS
{
const int x;
const int y;
this(T...)(T z)
{
this.tupleof = z;
}
}
void test1()
{
auto c = new C(4, 6);
assert(c.x == 4);
assert(c.y == 6);
auto cs = CS(7, 8);
assert(cs.x == 7);
assert(cs.y == 8);
}
//------------------------------------------------------------------------------
// https://issues.dlang.org/show_bug.cgi?id=435.
class B
{
int i;
this(int k)
{
i = k;
}
}
class D : B
{
this(A...)(A args)
{
super(args);
}
}
void test2()
{
auto a = new D(4);
assert(a.i == 4);
}
//------------------------------------------------------------------------------
// https://issues.dlang.org/show_bug.cgi?id=4905
class C2
{
string x;
this(T...)(in string msg, T args)
{
x = msg;
foreach (a; args)
x ~= a;
}
}
void test3()
{
auto c2 = new C2("test");
assert(c2.x == "test");
auto c3 = new C2("test", " variadic", " constructor");
assert(c3.x == "test variadic constructor");
}
//------------------------------------------------------------------------------
// https://issues.dlang.org/show_bug.cgi?id=4531 test case 2
class MyError : Exception
{
this(T...)(T msg)
{
assert(msg[0] == "Hello, " && msg[1] == 42);
super("Hello, 42");
}
}
void test4()
{
auto err = new MyError("Hello, ", 42);
assert(err.msg == "Hello, 42");
}
void main()
{
test0();
test1();
test2();
test3();
test4();
printf("Success\n");
}