mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00
147 lines
2.1 KiB
D
147 lines
2.1 KiB
D
/*
|
|
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");
|
|
}
|