使用“cstdarg”中的宏来访问普通函数参数是否合法?

Is it legit to use macros from `cstdarg` to access normal function arguments?

我正在写一个模板容器(类似于元组)。现在我需要为它创建一个构造函数。所以如果我这样定义它:

template <typename ...P> class Container
{
    /*blah-blah*/
public:
    Container(P...)
    {
        /*blah-blah*/
    };
};

我将在包展开后得到逗号分隔的匿名参数。为它们创建名称可能是不可能的,所以我正在考虑使用 'cstdarg' 中的宏来访问它们。当然,我需要创建一个非模板化的第一个参数来使用它们,但问题是:

使用 'cstdarg' 中的内容访问普通参数是否合法(只是普通参数,而不是与 ... 函数参数一起使用的参数)?

不,cstdarg 参数可以通过与命名参数(包括参数包)不同的 ABI 约定传递。通常,cstdarg 不支持非标准布局(即类 C)的 C++ 类型,并且不应在 C++ 代码中使用它。