105 lines
1.5 KiB
D
105 lines
1.5 KiB
D
struct Data
|
|
{
|
|
float inside_data;
|
|
Inner inner;
|
|
}
|
|
|
|
struct Inner
|
|
{
|
|
float inside_inner;
|
|
}
|
|
|
|
|
|
struct AganeOne(T)
|
|
{
|
|
T yo;
|
|
}
|
|
|
|
struct AganeTwo(T, U)
|
|
{
|
|
T yo_T;
|
|
U yo_U;
|
|
}
|
|
|
|
struct Other(T)
|
|
{
|
|
T what;
|
|
AganeOne!(T) agane_T;
|
|
AganeOne!(Inner) agane_inner;
|
|
}
|
|
|
|
|
|
struct MyTemplate(T)
|
|
{
|
|
T T_value;
|
|
Other!(T) other;
|
|
|
|
T get_this_value(T)()
|
|
{
|
|
return T_value;
|
|
}
|
|
}
|
|
struct Fat
|
|
{
|
|
struct Outter
|
|
{
|
|
struct Inner(T)
|
|
{
|
|
T from_inner_T;
|
|
}
|
|
int from_outter;
|
|
}
|
|
struct Other
|
|
{
|
|
int from_other;
|
|
}
|
|
struct Agane
|
|
{
|
|
int from_agane;
|
|
}
|
|
int from_fat;
|
|
}
|
|
|
|
struct One(T){ T inside_one; }
|
|
|
|
struct Outter {
|
|
struct Two(T, U){ T agane_one; U agane_two; One!(T) one_agane_one; }
|
|
}
|
|
|
|
struct A{ int inside_a;}
|
|
struct B{ int inside_b;}
|
|
|
|
|
|
void main()
|
|
{
|
|
auto from_auto = Outter.Two!(
|
|
AganeOne!(Other!Data),
|
|
AganeTwo!(A, B)
|
|
);
|
|
|
|
// import std;
|
|
from_auto.agane_one.yo.agane_inner.y;
|
|
|
|
//writeln(typeid(from_auto.agane_one.yo.agane_inner));
|
|
//writeln(typeid(from_auto.agane_one.yo.agane_T));
|
|
//writeln(typeid(from_auto.agane_one.yo.what));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
Inner(IdentifierOrTemplateInstance)
|
|
|
|
[One, Two]
|
|
[Fat, Outter] [A, B]
|
|
|
|
|
|
|
|
|
|
*/ |