<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Unfortunately that’s exactly what would make a library with typed units possible (see thread about „Epic: Typesafe calculations“).<div class=""><br class=""></div><div class="">-Thorsten</div><div class=""><br class=""></div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">Am 24.01.2016 um 10:01 schrieb Jacob Bandes-Storch via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt;:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">I'd guess the point is that the generics system isn't meant to force the compiler to perform the sorts of things C++'s (Turing-complete) template system can:<div class=""><br class=""><div class=""><div class=""><span style="font-family:monospace,monospace" class="">&nbsp; &nbsp; template&lt;size_t... F&gt;</span><br class=""></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; struct Fibonacci { };</font></div><div class=""><font face="monospace, monospace" class=""><br class=""></font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; // API</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; template&lt;size_t n&gt;</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; struct Fibonacci&lt;n&gt; {</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; &nbsp; &nbsp; static constexpr size_t value = Fibonacci&lt;n, 1, 0&gt;::value;</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; };</font></div><div class=""><font face="monospace, monospace" class=""><br class=""></font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; // Recursive implementation</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; template&lt;size_t n, size_t Fn, size_t Fm&gt;</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; struct Fibonacci&lt;n, Fn, Fm&gt; {</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; &nbsp; &nbsp; static constexpr size_t value = Fibonacci&lt;n-1, Fn+Fm, Fn&gt;::value;</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; };</font></div><div class=""><font face="monospace, monospace" class=""><br class=""></font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; // Base case</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; template&lt;size_t Fn, size_t Fm&gt;</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; struct Fibonacci&lt;0, Fn, Fm&gt; {</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; &nbsp; &nbsp; static constexpr size_t value = Fn;</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; };</font></div><div class=""><font face="monospace, monospace" class=""><br class=""></font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; int main() {</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; &nbsp; &nbsp; printf("F(200): %zu\n", Fibonacci&lt;200&gt;::value);</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; &nbsp; &nbsp; return 0;</font></div><div class=""><font face="monospace, monospace" class="">&nbsp; &nbsp; }</font></div></div><div class="gmail_extra"><br clear="all" class=""><div class=""><div class=""><div dir="ltr" class=""><div class="">Jacob<br class=""></div></div></div></div>
<br class=""><div class="gmail_quote">On Sat, Jan 23, 2016 at 11:17 PM, Michael Henson via swift-evolution <span dir="ltr" class="">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a>&gt;</span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr" class="">In the swift/docs/Generics.rst documentation, I see:<div class=""><br class=""></div><div class="">"</div><div class=""><div class="">As important as the goals of a feature are the explicit non-goals, which we don't want</div><div class="">or don't need to support:</div></div><div class="">* Compile-time "metaprogramming" in any form</div><div class="">* Expression-template tricks a la Boost.Spirit, POOMA</div><div class="">"</div><div class=""><br class=""></div><div class="">What kinds of things count as compile-time metaprogramming? I've been tinkering with some ideas related to the type system and having a more specific description here might help me pare many / most / all of them down.<br class=""><br class="">Mike</div></div>
<br class="">_______________________________________________<br class="">
swift-evolution mailing list<br class="">
<a href="mailto:swift-evolution@swift.org" target="_blank" class="">swift-evolution@swift.org</a><br class="">
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank" class="">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="">
<br class=""></blockquote></div><br class=""></div></div></div>
_______________________________________________<br class="">swift-evolution mailing list<br class=""><a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-evolution<br class=""></div></blockquote></div><br class=""></div></body></html>