<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">I personally prefer std::enable_if<>. For e.g.<div class=""><br class=""></div><div class="">template<typename T, class = typename std::enable_if<std::is_same<T, int>::value></div><div class="">Class Foo { }</div><div class=""><br class=""></div><div class="">I don’t like that something inside the body of a class / function would cause a template to be enabled or not.</div><div class=""><br class=""><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">--</div><div class=""><span style="font-size: 13px;" class=""> </span>Chris Dumez</div></div></div></div><br class="Apple-interchange-newline"></div><br class="Apple-interchange-newline"><br class="Apple-interchange-newline">
</div>
<div><br class=""><blockquote type="cite" class=""><div class="">On Aug 22, 2017, at 8:34 PM, Keith Miller <<a href="mailto:keith_miller@apple.com" class="">keith_miller@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Hello fellow WebKittens,<br class=""><br class="">I’ve noticed over time that we don’t have standard way that we enable versions of template functions/classes (flasses?). For the most part it seems that people use std::enable_if, although, it seems like it is attached to every possible place in the function/class.<br class=""><br class="">I propose that we choose a standard way to conditionally enable a template.<br class=""><br class="">There are a ton of options; my personal favorite is to add the following macro:<br class=""><br class="">#define ENABLE_TEMPLATE_IF(condition) static_assert(condition, “template disabled”)<br class=""><br class="">Then have every function do:<br class=""><br class="">template<typename T><br class="">void foo(…)<br class="">{<br class="">    ENABLE_TEMPLATE_IF(std::is_same<T, int>::value);<br class="">    …<br class="">}<br class=""><br class="">And classes:<br class=""><br class="">template<typename T><br class="">class Foo {<br class="">    ENABLE_TEMPLATE_IF(std::is_same<T, int>::value);<br class="">};<br class=""><br class="">I like this proposal because it doesn’t obstruct the signature/declaration of the function/class but it’s still obvious when the class is enabled. Obviously, I think we should require that this macro is the first line of the function or class for visibility. Does anyone else have thoughts or ideas?<br class=""><br class="">Cheers,<br class="">Keith<br class=""><br class="">P.S. in case you are wondering why this macro works (ugh C++), it’s because if there is any compile time error in a template it cannot be selected as the final candidate. In my examples, if you provided a type other than int foo/Foo could not be selected because the static_assert condition would be false, which is a compile error.<br class="">_______________________________________________<br class="">webkit-dev mailing list<br class=""><a href="mailto:webkit-dev@lists.webkit.org" class="">webkit-dev@lists.webkit.org</a><br class="">https://lists.webkit.org/mailman/listinfo/webkit-dev<br class=""></div></div></blockquote></div><br class=""></div></body></html>