在“0”参数上强制编译错误(C++)
任何人都可以告诉我,当const wchar_t*函数参数传递 0 指针时,是否有办法强制编译错误?
例如:
void func(const wchar_t* a)
{
...
}
int main()
{
...
func(0); // <- this should generate a compilation error
...
}
我的目的不是跳过函数内部对该参数的任何验证检查,而是在函数调用根本没有意义时阻止编译。
我正在使用 Visual Studio 2019
谢谢!!
更新
我尝试为 @Jarod42 提到的 std::nullptr_t 添加重载
这会产生一个编译错误,但它产生的错误是
“多个重载函数实例与参数列表匹配”
虽然它阻止了编译,但错误本身有点误导,并没有解决真正的问题
添加参数由int类型替换的重载也会得到误导性编译错误“试图访问已删除的函数”
是的,遗憾的是,没有一个能阻止带(const wchar_t*)0参数的调用
所以,我想说我想拒绝0文字和(const wchar_t*)0论点
回答
您可以为std::nullptr_t:添加重载:
void func(std::nullptr_t) = delete;
或者也许是一个全部:
template <typename T> void func(T) = delete;