<div>template isCallableCTFE(alias fun){</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>template isCallableCTFE_aux(alias T){</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>enum isCallableCTFE_aux=T;</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>enum isCallableCTFE=__traits(compiles,isCallableCTFE_aux!(fun()));</div><div>}</div>
<div><br></div><div>template isCallableCTFE2(fun...){</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>enum isCallableCTFE2=true;</div><div>}</div><div><br></div><div><br></div><div>unittest{</div><div>
<span class="Apple-tab-span" style="white-space:pre"> </span>int fun1(){</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>return 1;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>auto fun1_N(){</div><div><span class="Apple-tab-span" style="white-space:pre">               </span>import std.array;</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>//would return Error: gc_malloc cannot be interpreted at compile time, because it has no available source code due to a bug</div>
<div><span class="Apple-tab-span" style="white-space:pre">              </span>return [1].array;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>int fun2(int x){</div>
<div><span class="Apple-tab-span" style="white-space:pre">              </span>return 1;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>auto fun2_N(int x){</div>
<div><span class="Apple-tab-span" style="white-space:pre">              </span>import std.array;</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>//same as fun1_N</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>return [1].array;</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>int a1;</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>enum a2=0;</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>static assert(!isCallableCTFE!(()=>a1));</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>static assert(isCallableCTFE!(()=>a2));</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>static assert(isCallableCTFE!fun1);</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>static assert(!isCallableCTFE!fun1_N);</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>static assert(isCallableCTFE!(()=>fun2(0)));</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>static assert(!isCallableCTFE!(()=>fun2_N(0)));</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>//NOTE:an alternate syntax which could be implemented would be: static assert(!isCallableCTFE!(fun2_N,0)));</div><div>}</div>