This updates the implementation to reflect a part of the D ABI spec that has been removed. There should never be a bare integer value encoded into a template argument list. Integers are always prefixed by `i' if they are positive or `N' if they are negative. Have verified this indeed is the case using the code below, and updated all coverage tests to match the compiler. module demangle; template test(alias T) { void test() { auto t = T; } } pragma(msg, (test!(cast(byte)123)).mangleof); pragma(msg, (test!(cast(int)123)).mangleof); pragma(msg, (test!(cast(short)123)).mangleof); pragma(msg, (test!(cast(ubyte)123)).mangleof); pragma(msg, (test!(cast(uint)123)).mangleof); pragma(msg, (test!(cast(ushort)123)).mangleof); pragma(msg, (test!(cast(long)123)).mangleof); pragma(msg, (test!(cast(ulong)123)).mangleof); pragma(msg, (test!(true)).mangleof); pragma(msg, (test!(false)).mangleof); pragma(msg, (test!('\x0a')).mangleof); pragma(msg, (test!(' ')).mangleof); pragma(msg, (test!('A')).mangleof); pragma(msg, (test!('~')).mangleof); pragma(msg, (test!('\u03e8')).mangleof); pragma(msg, (test!('\U000186a0')).mangleof); ---