~optional();
Effects: If is_trivially_destructible_v<T> != true and *this contains a value, calls
val->T::~T()
Remarks: If is_trivially_destructible_v<T> == true then this destructor shall be a trivial destructor.