blob: e003c959f4e21bdd3b0756ece4bf6a498cbc4e3e [file] [log] [blame]
// 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;
}