gpt4 book ai didi

c++ - 如何在 MSVC 中为传递给可变参数函数的非 POD 参数启用警告/错误?

转载 作者:太空宇宙 更新时间:2023-11-04 11:35:43 30 4
gpt4 key购买 nike

正如问题所暗示的,在编译下面的代码时,我希望 MSVC 通知我它正在使用实现定义的行为。

void DoStuff_variadic(...)
{}

class SomeClass{
// 'non-trivial' constructor to make it non-POD
SomeClass(){};
};

int main()
{
SomeClass classInstance;
DoStuff_variadic(classInstance);
}

在 Clang++ 中,它会失败并显示消息:

error: cannot pass object of non-trivial type 'SomeClass' through variadic function; call will abort at runtime [-Wnon-pod-varargs]

我希望在 MSVC11(没有 11 月更新)上触发错误或警告。这可能吗?如果可以,我将如何启用它们?

最佳答案

如果没有 11 月的更新,这在 MSVC11 上通常是不可能的。

/WAll 上运行时,不会针对此问题引发警告或错误。

如果可变参数模板和可变参数函数一样可用,您可以通过隐式可变参数模板函数传递它。然后,模板函数可以使用类型特征和 static_assert 静态检查所有类型是否都是 POD,然后将参数传递给可变参数函数本身。

MSVC11 不实现可变参数模板。根据您的使用情况,实现一组模板函数可能是可行的:一个用于 0 个参数,一个用于 1 个参数,一个用于 2 个参数等等,直到任意数量。这些中的每一个都将执行与前面描述的可变参数模板函数相同的功能。

除了使用 MSVC11 之外,在本地的 Clang 上编译可能更容易。

关于c++ - 如何在 MSVC 中为传递给可变参数函数的非 POD 参数启用警告/错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23131695/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com