Boost logo

Boost :

Subject: Re: [boost] Generic type inferencer function?
From: Nevin Liber (nevin_at_[hidden])
Date: 2015-12-18 11:50:36

On 18 December 2015 at 10:37, Stefan Seefeld <stefan_at_[hidden]> wrote:

> On 18.12.2015 11:20, Nat Goodspeed wrote:
> > Am I overlooking a generic boost::make<something>() of this general form?
> >
> > template <template<typename...> class CLASS_TEMPLATE, typename... ARGS>
> > CLASS_TEMPLATE<ARGS...> make(ARGS && ... args)
> > {
> > return CLASS_TEMPLATE<ARGS...>(std::forward<ARGS>(args)...);
> > }
> >
> > If that doesn't already exist... would it be useful to add (a less
> > naive version) somewhere?
> Given the small amount of code potentially to be reused, what would be
> the advantage of having a generic version ? The goal of abstraction
> should be clarity, but more often than not, generalizing code rips off
> not only unnecessary details but also its meaning, making the code
> harder, not easier, to understand.

I disagree. The make_* functions are just noise, and I'd love to see a
generic one. While return type deduction has made it somewhat easier to
write these functions, a generic one would be superior.

Note: you cannot do a completely generic one, because you don't know
whether to deduce type parameters or non-type parameters (such as for

An even better solution is a language change such as the one proposed
in P0091R0
Template parameter deduction for constructors
<>, but
I don't know the status of that proposal.

 Nevin ":-)" Liber  <mailto:nevin_at_[hidden]>  +1-847-691-1404

Boost list run by bdawes at, gregod at, cpdaniel at, john at