| /* |
| TEST_OUTPUT: |
| --- |
| fail_compilation/fail7352.d(42): Error: template instance `Type!(1)` does not match template declaration `Type(T)` |
| fail_compilation/fail7352.d(43): Error: template instance `Type!(b)` does not match template declaration `Type(T)` |
| fail_compilation/fail7352.d(43): `b` is not a type |
| fail_compilation/fail7352.d(44): Error: template instance `Type!(function () pure nothrow @nogc @safe => 1)` does not match template declaration `Type(T)` |
| fail_compilation/fail7352.d(45): Error: template instance `Type!(fun)` does not match template declaration `Type(T)` |
| fail_compilation/fail7352.d(45): `fun` is not a type |
| fail_compilation/fail7352.d(47): Error: template instance `Immutable!int` does not match template declaration `Immutable(T : immutable(T))` |
| fail_compilation/fail7352.d(49): Error: template instance `Value!int` does not match template declaration `Value(string s)` |
| fail_compilation/fail7352.d(50): Error: template instance `Value!(1)` does not match template declaration `Value(string s)` |
| fail_compilation/fail7352.d(51): Error: template instance `Value!(fun)` does not match template declaration `Value(string s)` |
| fail_compilation/fail7352.d(51): `fun` is not of a value of type `string` |
| --- |
| */ |
| |
| template Type(T) |
| { |
| } |
| |
| template Immutable(T : immutable(T)) |
| { |
| alias Immutable = T; |
| } |
| |
| template Value(string s) |
| { |
| auto x = s; |
| } |
| |
| int fun(int i) |
| { |
| return i; |
| } |
| |
| void main() |
| { |
| enum a = 1; |
| int b; |
| |
| Type!a testTypeValue; |
| Type!b testTypeVar; |
| Type!(() => 1) testTypeFuncLiteral; |
| Type!fun testTypeFunc; |
| |
| Immutable!int testImmutable; |
| |
| auto testValueType = Value!int.x; |
| auto testValueWrongType = Value!a.x; |
| auto testValueFunc = Value!fun.x; |
| } |