I'd suggest considering what it'll look like when we're migrating to concepts in C++20.
Here's an example for our bitwise_cast: https://github.com/jfbastien/bit_cast/blob/master/bit_cast.h#L10 Notice the 3 ways to enable. There's also the option of using enable_if on the return value, or as a defaulted function parameter, but I'm not a huge fan of either. On Tue, Aug 22, 2017 at 9:13 PM, Chris Dumez <cdu...@apple.com> wrote: > I personally prefer std::enable_if<>. For e.g. > > template<typename T, class = typename std::enable_if<std::is_same<T, > int>::value> > Class Foo { } > > I don’t like that something inside the body of a class / function would > cause a template to be enabled or not. > > -- > Chris Dumez > > > > > On Aug 22, 2017, at 8:34 PM, Keith Miller <keith_mil...@apple.com> wrote: > > Hello fellow WebKittens, > > 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. > > I propose that we choose a standard way to conditionally enable a template. > > There are a ton of options; my personal favorite is to add the following > macro: > > #define ENABLE_TEMPLATE_IF(condition) static_assert(condition, “template > disabled”) > > Then have every function do: > > template<typename T> > void foo(…) > { > ENABLE_TEMPLATE_IF(std::is_same<T, int>::value); > … > } > > And classes: > > template<typename T> > class Foo { > ENABLE_TEMPLATE_IF(std::is_same<T, int>::value); > }; > > 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? > > Cheers, > Keith > > 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. > _______________________________________________ > webkit-dev mailing list > webkit-dev@lists.webkit.org > https://lists.webkit.org/mailman/listinfo/webkit-dev > > > > _______________________________________________ > webkit-dev mailing list > webkit-dev@lists.webkit.org > https://lists.webkit.org/mailman/listinfo/webkit-dev > >
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev