The program below compiles. Clearly the "if" constraints in my original example are causing trouble. It seems like a bug to me. import std.stdio; void Foo(T:T*)(T arg) { writeln("arg of Foo:", arg, typeid(T)); } void main() { Foo!(long*)(54); }