mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 13:10:12 +03:00
156 lines
2.3 KiB
D
156 lines
2.3 KiB
D
// EXTRA_CPP_SOURCES: externmangle2.cpp
|
|
// DISABLED: win
|
|
|
|
extern(C++):
|
|
|
|
struct Test32NS1
|
|
{
|
|
struct Foo(X)
|
|
{
|
|
X *v;
|
|
}
|
|
|
|
|
|
struct Bar(X)
|
|
{
|
|
X *v;
|
|
}
|
|
|
|
};
|
|
|
|
struct Test32NS2
|
|
{
|
|
struct Foo(X)
|
|
{
|
|
X *v;
|
|
}
|
|
};
|
|
|
|
struct Test32(alias Y, alias Z)
|
|
{
|
|
Y!(int)* field;
|
|
};
|
|
|
|
|
|
void test32a(Test32!(Test32NS1.Foo, Test32NS1.Foo) arg);
|
|
void test32b(Test32!(Test32NS1.Foo, Test32NS1.Bar) arg);
|
|
void test32c(Test32!(Test32NS1.Foo, Test32NS2.Foo) arg);
|
|
void test32d(Test32!(Test32NS1.Foo, Test32NS2.Foo) arg1, Test32!(Test32NS2.Foo, Test32NS1.Foo) arg2);
|
|
|
|
interface XXX
|
|
{
|
|
}
|
|
|
|
void test33a(XXX, XXX*);
|
|
|
|
|
|
struct Test33(alias A, alias B)
|
|
{
|
|
}
|
|
|
|
/*
|
|
void test33(XXX, Test33!(test33a, test33a) arg, XXX);
|
|
|
|
|
|
struct Test34(alias A)
|
|
{
|
|
};
|
|
|
|
struct Test34A
|
|
{
|
|
static void foo(int);
|
|
};
|
|
|
|
|
|
void test34(Test34!(Test34A.foo) arg);
|
|
*/
|
|
|
|
__gshared extern int test36;
|
|
|
|
/*
|
|
struct Test37(alias A)
|
|
{
|
|
};
|
|
|
|
struct Test37A
|
|
{
|
|
__gshared extern int t38;
|
|
};
|
|
|
|
void test37(Test37!(test36) arg);
|
|
void test38(Test37!(Test37A.t38) arg);
|
|
*/
|
|
|
|
struct Test39
|
|
{
|
|
struct T39A(X)
|
|
{
|
|
}
|
|
}
|
|
|
|
struct T39A
|
|
{
|
|
}
|
|
|
|
void test39(Test39.T39A!(.T39A));
|
|
|
|
version(none)
|
|
{
|
|
version(Posix) //Only for g++ with -std=c++0x and Visual Studio 2013+
|
|
{
|
|
|
|
struct Test40(T, V...)
|
|
{
|
|
|
|
}
|
|
|
|
void test40(Test40!(int, double, void))
|
|
{
|
|
}
|
|
}
|
|
else version(Win64) //Only for g++ with -std=c++0x and Visual Studio 2013+
|
|
{
|
|
|
|
struct Test40(T, V...)
|
|
{
|
|
|
|
}
|
|
|
|
void test40(Test40!(int, double, void))
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
__gshared extern const XXX test41;
|
|
struct Test42
|
|
{
|
|
__gshared extern const XXX test42;
|
|
}
|
|
__gshared extern int[4] test43;
|
|
const(XXX) test44();
|
|
|
|
void main()
|
|
{
|
|
test32a(Test32!(Test32NS1.Foo, Test32NS1.Foo)());
|
|
test32b(Test32!(Test32NS1.Foo, Test32NS1.Bar)());
|
|
test32c(Test32!(Test32NS1.Foo, Test32NS2.Foo)());
|
|
test32d(Test32!(Test32NS1.Foo, Test32NS2.Foo)(), Test32!(Test32NS2.Foo, Test32NS1.Foo)());
|
|
|
|
//test33a(null, null);
|
|
//test33(null, Test33!(test33a, test33a)(), null);
|
|
|
|
//test34(Test34!(Test34A.foo)());
|
|
|
|
assert(test36 == 36);
|
|
|
|
//test37(Test37!(test36)());
|
|
//test38(Test37!(Test37A.t38)());
|
|
test39(Test39.T39A!(.T39A)());
|
|
|
|
assert(test41 is null);
|
|
assert(Test42.test42 is null);
|
|
assert(test43 == [1, 2, 3, 4]);
|
|
auto ptr = &test44;
|
|
}
|