如问题所示,在编译下面的代码时,我希望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月的更新)。这是可能的吗?如果是的话,我将如何启用它们?
发布于 2014-04-17 13:16:38
如果没有11月的更新,这在MSVC11上是不可能的。
在/WAll上运行时,不会对此问题产生警告或错误。
如果变量模板和变量函数都可用,则可以通过隐式变量模板函数传递它。模板函数可以使用类型性状和static_assert静态地检查所有类型是否为过氧化物酶,然后将参数传递给变量函数本身。
MSVC11不实现可变模板。根据您的使用情况,实现一组模板函数可能是可行的:一个用于0参数,一个用于一个参数,一个用于2个参数等等,直到任意数目为止。其中每一个都将执行与前面描述的可变模板函数相同的功能。
除了使用MSVC11之外,在Clang上进行本地编译可能更容易。
https://stackoverflow.com/questions/23131695
复制相似问题