Maybe type implementation
Creating holes in the type system:

operator T&amp; and it's const sibling is probably very undesirable conversion. Why, then, std::string doesn't have operator const char*()? The answer is a type system. It meant to be explicit. std::optional uses overloading of operator*() and operator-&gt;().

Don't pay for what you don't use:

I would expect constructor to not check for is_valid of itself, because it is obvious (you're calling create() from constructor, which does check for validity). In most cases this won't make a difference, but you still should strive for perfection.

Missing features:


swap
comparison operators
emplace
value_or, which is I think the most useful. Returns provided default value if there optional is not initialized yet. 
one function that throws when the optional is not initialized yet. just() is a great candidate.


Style:

You could enter a newline in some places where the line is long. 

I think that calling global std might be somewhat restricting. It is arguable, though.