Optional arguments using reference wrappers

struct bigparam {

    // ...
    bigparam(const bigparam &)=delete;
};

void some_function(const x::optional_argconstrefs< ..., bigparam, ...> &)
{

// ...

some_function(..., big_param{....}, ...);

The x::optional_argconstrefs template is a convenient wrapper that implements x::optional_args's variadic std::optional values as std::reference_wrappers. This avoids making copies of individual optional parameters when they cannot be constructed or move-constructed in place, or the copy cannot be elided, for some reason.

Requirements for safely using x::optional_argconstrefs: