Polymorphic constructors ======================== Writing polymorphic constructors(such as `make_tuple`) is a boilerplate that has to be written over and over again for template classes: template struct unwrap_refwrapper { typedef T type; }; template struct unwrap_refwrapper> { typedef T& type; }; template struct unwrap_ref_decay : unwrap_refwrapper::type> {}; template std::tuple::type...> make_tuple(Types&&... args) { return std::tuple::type...>(std::forward(args)...); } The [`construct`](include/boost/hof/construct) function takes care of all this boilerplate, and the above can be simply written like this: BOOST_HOF_STATIC_FUNCTION(make_tuple) = construct();