https://d.puremagic.com/issues/show_bug.cgi?id=11553
--- Comment #3 from John Colvin <[email protected]> 2013-11-19 14:42:42 GMT --- Finally, a correct (should compile) example that causes a segfault. It's still a little large, sorry: struct Pack(T ...) { alias Unpack = T; enum length = T.length; } template isPack(TList ...) { static if(TList.length == 1 && is(Pack!(TList[0].Unpack) == TList[0])) { enum isPack = true; } else { enum isPack = false; } } template PartialApply(alias T, uint argLoc, Arg ...) if(Arg.length == 1) { template PartialApply(L ...) { alias PartialApply = T!(L[0 .. argLoc], Arg, L[argLoc .. $]); } } template _hasLength(size_t len, T) { static if(T.length == len) { enum _hasLength = true; } else { enum _hasLength = false; } } alias _hasLength(size_t len) = PartialApply!(._hasLength, 0, len); alias hl1 = _hasLength!1; //this segfaults static if(!isPack!hl1){ pragma(msg, "All good 1"); } //these are fine static if(hl1!(Pack!(5))) { pragma(msg, "All good 2"); } static if(!hl1!(Pack!())) { pragma(msg, "All good 3"); } The result: Program received signal SIGSEGV, Segmentation fault. 0x0000000000434a45 in Dsymbol::Dsymbol(Identifier*) () -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
