c++ - What does it mean when one says something is SFINAE-friendly? -


i can't grasp of means when 1 mentions particular function, struct or ... sfinae-friendly.

would please explain it?

when allows substitution failure without hard error (as static_assert).

for example

template <typename t> void call_f(const t& t) {     t.f(); } 

the function declared t, don't have f, cannot sfinae on call_f<withoutf> method exist. (demo of non compiling code).

with following change:

template <typename t> auto call_f(const t& t) ->decltype(t.f(), void()) {     t.f(); } 

the method exists only valid t. can use sfinae as

template<typename t> auto call_f_if_available_impl(const t& t, int) -> decltype(call_f(t)) {     call_f(t); }  template<typename t> auto call_f_if_available_impl(const t& t, ...) {     // nothing; }   template<typename t>  auto call_f_if_available(const t& t)  {     call_f_if_available_impl(t, 0);  } 

note int = 0 , ... order overload. demo

--

an other case when template add special parameter apply sfinae specialization:

template <typename t, typename enabler = void> struct s; 

and then

// specialization available t respect traits. template <typename t> struct s<t, std::enable_if_t<my_type_trait<t>::value>> { }; 

Comments

Popular posts from this blog

php - Wordpress website dashboard page or post editor content is not showing but front end data is showing properly -

javascript - Get parameter of GET request -

javascript - Twitter Bootstrap - how to add some more margin between tooltip popup and element -