I am trying to figure out the best way to prevent integer 0 from being implicitly cast to nullptr\_t and then passed to constructors that take pointers. Explicit doesn't do it, but I can get nullptr\_t to cause an ambiguous overload error:

```
#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
}

```

Is there a better way than this? Also, what exactly is delete accomplishing here?