97 lines
1.5 KiB
D
97 lines
1.5 KiB
D
struct Data
|
|
{
|
|
int inside_data;
|
|
Inner inner;
|
|
}
|
|
|
|
struct Inner
|
|
{
|
|
int inside_inner;
|
|
}
|
|
|
|
struct AganeOne(T)
|
|
{
|
|
int inside_aganeone;
|
|
T yo;
|
|
}
|
|
|
|
struct AganeTwo(T, U)
|
|
{
|
|
int inside_aganetwo;
|
|
T yo_T;
|
|
U yo_U;
|
|
}
|
|
|
|
struct Other(T)
|
|
{
|
|
int inside_other;
|
|
T what;
|
|
AganeOne!(T) agane_T;
|
|
AganeOne!(Inner) agane_inner;
|
|
}
|
|
|
|
struct One(T){ T inside_one; }
|
|
|
|
struct Outter {
|
|
struct Two(T, U){ int inside_two; T agane_one; U agane_two; One!(T) one_agane_one; T get_T(T)(){return T.init;} U get_U(){return U.init;} }
|
|
}
|
|
|
|
struct A{ int inside_a;}
|
|
struct B{ int inside_b;}
|
|
|
|
|
|
void main()
|
|
{
|
|
auto from_auto = Outter.Two!(
|
|
AganeOne!(Other!(Data)),
|
|
AganeTwo!(A, B)
|
|
)();
|
|
|
|
|
|
auto check = from_auto;
|
|
|
|
|
|
|
|
import std;
|
|
|
|
// should be of type Inner, completion: inside_inner
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
writeln(typeid(from_auto.agane_one)); //file1.AganeOne!(file1.Other!(file1.Data).Other).AganeOne
|
|
writeln(typeid(from_auto.agane_one.yo)); // file1.Other!(file1.Data).Other
|
|
writeln(typeid(from_auto.agane_one.yo.agane_inner)); // file1.AganeOne!(file1.Inner).AganeOne
|
|
writeln(typeid(from_auto.agane_one.yo.agane_inner.yo)); // file1.Inner
|
|
}
|
|
|
|
|
|
// struct S { int x; int y; }
|
|
|
|
// S doStuff(int x) { return S(); }
|
|
|
|
// void main(string[] args)
|
|
// {
|
|
// auto alpha = 10;
|
|
// auto bravo = S(1, 2);
|
|
// int charlie = 4;
|
|
// auto delta = doStuff();
|
|
// {
|
|
// alpha
|
|
// }
|
|
// {
|
|
// bravo.
|
|
// }
|
|
// {
|
|
// charlie.
|
|
// }
|
|
// {
|
|
// delta.
|
|
// }
|
|
// }
|
|
|