我试图找出防止整数 0 被隐式转换为 nullptr_t 然后传递给采用指针的构造函数的最佳方法。显式不这样做,但我可以让 nullptr_t 导致模棱两可的重载错误:
#include <typeinfo.h>
struct A {
explicit A(char*) { }
};
struct B {
B(nullptr_t a) = delete;
B(char*) { }
};
int main(int argc, char* argv[])
{
A a(0); // darnit I compiled...
B b1(0); // good, fails, but with only b/c ambiguous
B b2((char*)0); // good, succeeds
B b3(1); // good, fails, with correct error
}
还有比这更好的方法吗?另外,delete 到底在这里完成了什么?