describeTemplate

Describes a template

describeTemplate
()
()
if (
__traits(isTemplate, T)
)

Examples

It should describe the template name and parameters

1 template foo(T) {
2   alias foo = string;
3 }
4 
5 auto result = describeTemplate!foo;
6 
7 result.name.should.equal("foo");
8 result.parameters.length.should.equal(0);
9 
10 result.templateParameters.length.should.equal(1);
11 result.templateParameters[0].name.should.equal("T");
12 result.templateParameters[0].original.should.equal("T");
13 result.templateParameters[0].type.should.equal("");
14 result.templateParameters[0].defaultValue.should.equal("");
15 result.templateParameters[0].isVariadic.should.equal(false);
16 
17 result.protection.should.equal(Protection.public_);
18 
19 result.location.file.should.equal("source/introspection/template_.d");
20 result.location.line.should.be.greaterThan(0);
21 result.location.column.should.equal(3);

It should describe a templated function

1 void foo(T)(T param) { }
2 
3 auto result = describeTemplate!foo;
4 
5 result.name.should.equal("foo");
6 result.templateParameters.length.should.equal(1);
7 
8 result.templateParameters[0].name.should.equal("T");
9 result.templateParameters[0].original.should.equal("T");
10 result.templateParameters[0].type.should.equal("");
11 result.templateParameters[0].defaultValue.should.equal("");
12 result.templateParameters[0].isVariadic.should.equal(false);
13 
14 result.parameters.length.should.equal(1);
15 result.parameters[0].name.should.equal("param");
16 result.parameters[0].original.should.equal("T param");
17 result.parameters[0].type.should.equal("T");
18 result.parameters[0].defaultValue.should.equal("");
19 result.parameters[0].isVariadic.should.equal(false);

It should describe a templated function with default values

1 void foo(T = int)(T param) { }
2 
3 auto result = describeTemplate!foo;
4 
5 result.name.should.equal("foo");
6 result.templateParameters.length.should.equal(1);
7 
8 result.templateParameters[0].name.should.equal("T");
9 result.templateParameters[0].defaultValue.should.equal("int");
10 result.templateParameters[0].original.should.equal("T = int");
11 result.templateParameters[0].type.should.equal("");
12 result.templateParameters[0].isVariadic.should.equal(false);
13 
14 result.parameters.length.should.equal(1);
15 result.parameters[0].name.should.equal("param");
16 result.parameters[0].original.should.equal("T param");
17 result.parameters[0].type.should.equal("T");
18 result.parameters[0].defaultValue.should.equal("");
19 result.parameters[0].isVariadic.should.equal(false);

It should describe a templated function with a numeric parameter and variadic parameters

1 void foo(int a = 3, T...)(int b) if(T.length > 1) { }
2 
3 auto result = describeTemplate!foo;
4 
5 result.name.should.equal("foo");
6 result.templateParameters.length.should.equal(2);
7 
8 result.templateParameters[0].name.should.equal("a");
9 result.templateParameters[0].defaultValue.should.equal("3");
10 result.templateParameters[0].original.should.equal("int a = 3");
11 result.templateParameters[0].type.should.equal("int");
12 result.templateParameters[0].isVariadic.should.equal(false);
13 
14 result.templateParameters[1].name.should.equal("T");
15 result.templateParameters[1].defaultValue.should.equal("");
16 result.templateParameters[1].original.should.equal("T...");
17 result.templateParameters[1].type.should.equal("");
18 result.templateParameters[1].isVariadic.should.equal(true);
19 
20 result.parameters.length.should.equal(1);
21 result.parameters[0].name.should.equal("b");
22 result.parameters[0].original.should.equal("int b");
23 result.parameters[0].type.should.equal("int");
24 result.parameters[0].defaultValue.should.equal("");
25 result.parameters[0].isVariadic.should.equal(false);

It should describe a templated class with a numeric parameter and variadic parameters

1 class Foo(int a = 3, T...) {
2   void bar() {}
3 }
4 
5 auto result = describeTemplate!Foo;
6 
7 result.name.should.equal("Foo");
8 result.templateParameters.length.should.equal(2);
9 
10 result.templateParameters[0].name.should.equal("a");
11 result.templateParameters[0].defaultValue.should.equal("3");
12 result.templateParameters[0].original.should.equal("int a = 3");
13 result.templateParameters[0].type.should.equal("int");
14 result.templateParameters[0].isVariadic.should.equal(false);
15 
16 result.templateParameters[1].name.should.equal("T");
17 result.templateParameters[1].defaultValue.should.equal("");
18 result.templateParameters[1].original.should.equal("T...");
19 result.templateParameters[1].type.should.equal("");
20 result.templateParameters[1].isVariadic.should.equal(true);

Meta