It should describe the template name and parameters
template foo(T) { alias foo = string; } auto result = describeTemplate!foo; result.name.should.equal("foo"); result.parameters.length.should.equal(0); result.templateParameters.length.should.equal(1); result.templateParameters[0].name.should.equal("T"); result.templateParameters[0].original.should.equal("T"); result.templateParameters[0].type.should.equal(""); result.templateParameters[0].defaultValue.should.equal(""); result.templateParameters[0].isVariadic.should.equal(false); result.protection.should.equal(Protection.public_); result.location.file.should.equal("source/introspection/template_.d"); result.location.line.should.be.greaterThan(0); result.location.column.should.equal(3);
It should describe a templated function
void foo(T)(T param) { } auto result = describeTemplate!foo; result.name.should.equal("foo"); result.templateParameters.length.should.equal(1); result.templateParameters[0].name.should.equal("T"); result.templateParameters[0].original.should.equal("T"); result.templateParameters[0].type.should.equal(""); result.templateParameters[0].defaultValue.should.equal(""); result.templateParameters[0].isVariadic.should.equal(false); result.parameters.length.should.equal(1); result.parameters[0].name.should.equal("param"); result.parameters[0].original.should.equal("T param"); result.parameters[0].type.should.equal("T"); result.parameters[0].defaultValue.should.equal(""); result.parameters[0].isVariadic.should.equal(false);
It should describe a templated function with default values
void foo(T = int)(T param) { } auto result = describeTemplate!foo; result.name.should.equal("foo"); result.templateParameters.length.should.equal(1); result.templateParameters[0].name.should.equal("T"); result.templateParameters[0].defaultValue.should.equal("int"); result.templateParameters[0].original.should.equal("T = int"); result.templateParameters[0].type.should.equal(""); result.templateParameters[0].isVariadic.should.equal(false); result.parameters.length.should.equal(1); result.parameters[0].name.should.equal("param"); result.parameters[0].original.should.equal("T param"); result.parameters[0].type.should.equal("T"); result.parameters[0].defaultValue.should.equal(""); result.parameters[0].isVariadic.should.equal(false);
It should describe a templated function with a numeric parameter and variadic parameters
void foo(int a = 3, T...)(int b) if(T.length > 1) { } auto result = describeTemplate!foo; result.name.should.equal("foo"); result.templateParameters.length.should.equal(2); result.templateParameters[0].name.should.equal("a"); result.templateParameters[0].defaultValue.should.equal("3"); result.templateParameters[0].original.should.equal("int a = 3"); result.templateParameters[0].type.should.equal("int"); result.templateParameters[0].isVariadic.should.equal(false); result.templateParameters[1].name.should.equal("T"); result.templateParameters[1].defaultValue.should.equal(""); result.templateParameters[1].original.should.equal("T..."); result.templateParameters[1].type.should.equal(""); result.templateParameters[1].isVariadic.should.equal(true); result.parameters.length.should.equal(1); result.parameters[0].name.should.equal("b"); result.parameters[0].original.should.equal("int b"); result.parameters[0].type.should.equal("int"); result.parameters[0].defaultValue.should.equal(""); result.parameters[0].isVariadic.should.equal(false);
It should describe a templated class with a numeric parameter and variadic parameters
class Foo(int a = 3, T...) { void bar() {} } auto result = describeTemplate!Foo; result.name.should.equal("Foo"); result.templateParameters.length.should.equal(2); result.templateParameters[0].name.should.equal("a"); result.templateParameters[0].defaultValue.should.equal("3"); result.templateParameters[0].original.should.equal("int a = 3"); result.templateParameters[0].type.should.equal("int"); result.templateParameters[0].isVariadic.should.equal(false); result.templateParameters[1].name.should.equal("T"); result.templateParameters[1].defaultValue.should.equal(""); result.templateParameters[1].original.should.equal("T..."); result.templateParameters[1].type.should.equal(""); result.templateParameters[1].isVariadic.should.equal(true);
Describes a template