Smart pointer that cannot be nullptr
Well, in principle having non-nullable pointers, smart or not, is a good thing. It's just a shame that nullability is not an optional non-default trait (not only for pointers, but for all types; for numbers non-zeroability might be an interesting companion-trait, which incidentally makes the former more efficient).

Your implementation of it leaves something to be desired though, because you completely block conversion from "normal" nullable pointers to your non-nullable one and back. That severely limits your types utility.
Also, one expects a lot more functionality from a pointer-like type, like more conversions, more operators, and the rest of the smart-pointer-interface, at least as far as compatible with the design-goals.

Now let's look at the code of your prototype:


Separate your new smart-pointer from the test-code, and make it a self-contained header-only-library.
Never use using namespace std; in an include-file, not that it is much better in a source-file. Read "Why is “using namespace std;” considered bad practice?" for the reasons.
As said above, you need loads more accessors, and all the other functons, member and free, which comprise the interface for a smart-pointer.
If you use private inheritance, you have an easier time passing through the needed interface with using than writing it from scratch.


And the code of your test:


Only explicitly flush a stream if you really need to. Doing so frivolously is quote costly.
If you want to output a single character to a stream, consider doing so explicitly instead of with a length-1 C-string. It's potentially slightly more efficient.