Implementation similar to boost::optional for modelling function failure
Let's go over it bit-by-bit:


You should sprinkle around quite a lot of constexpr and noexcept-markers.
If at least one instantiation of a template is potentially constexpr, marking the template thus is not an error. Not marking it means none is.
union{T value;}; better shows the intent and is simpler than alignas(T) char storage[sizeof(T)];.
Do not values with byte-for-byte unless they are trivial types. Doing so is simply wrong.
The move-ctor should move, not swap. That might be far less expensive anyway.
Your base variant should gain a specialization for trivially copyable types.
Your base-variant should have a variadic-template ctor for constructing the value directly.
Your references-variant does not need a separate valid-flag: *NULL is not valid, thus a null pointer serves adequately.
Only include the minimal headers you need in your include-file.
Do not use an unnamed namespace, or every translation-unit will have its own unique template (which is different from all the others).


As a side-note, boost::optional should serve for the case you describe.