首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何启用MSVC中传递给Variadic函数的非POD参数的警告/错误?

如何启用MSVC中传递给Variadic函数的非POD参数的警告/错误?
EN

Stack Overflow用户
提问于 2014-04-17 11:17:08
回答 1查看 479关注 0票数 1

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

代码语言:javascript
复制
void DoStuff_variadic(...)
{}

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

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

在Clang++中,该消息将失败:

代码语言:javascript
复制
error: cannot pass object of non-trivial type 'SomeClass' through variadic function; call will abort at runtime [-Wnon-pod-varargs]

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-17 13:16:38

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

/WAll上运行时,不会对此问题产生警告或错误。

如果变量模板和变量函数都可用,则可以通过隐式变量模板函数传递它。模板函数可以使用类型性状和static_assert静态地检查所有类型是否为过氧化物酶,然后将参数传递给变量函数本身。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23131695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档