|  | 
|  | Optional ()=default | 
|  | 
|  | Optional (const Optional &)=default | 
|  | 
|  | Optional (Optional &&)=default | 
|  | 
| Optional & | operator= (const Optional &)=default | 
|  | 
| Optional & | operator= (Optional &&)=default | 
|  | 
|  | Optional (Nullopt) noexcept | 
|  | 
| template<typename Head , typename... Tail, std::enable_if_t<! IsOptional< std::decay_t< Head > >::value, int >  = 0> | 
|  | Optional (Head &&head, Tail &&... tail) noexcept(std::is_nothrow_constructible_v< std::optional< Value >, Head, Tail... >) | 
|  | 
| template<typename Other > | 
|  | Optional (const Optional< Other > &other) noexcept(std::is_nothrow_constructible_v< std::optional< Value >, const std::optional< Other > & >) | 
|  | 
| template<typename Other > | 
|  | Optional (Optional< Other > &&other) noexcept(std::is_nothrow_constructible_v< std::optional< Value >, std::optional< Other > && >) | 
|  | 
| template<typename Other , std::enable_if_t<! IsOptional< std::decay_t< Other > >::value, int >  = 0> | 
| Optional & | operator= (Other &&other) noexcept(std::is_nothrow_assignable_v< std::optional< Value >, Other >) | 
|  | 
| template<typename Other > | 
| Optional & | operator= (const Optional< Other > &other) noexcept(std::is_nothrow_assignable_v< std::optional< Value >, const std::optional< Other > & >) | 
|  | 
| template<typename Other > | 
| Optional & | operator= (Optional< Other > &&other) noexcept(std::is_nothrow_assignable_v< std::optional< Value >, std::optional< Other > && >) | 
|  | 
| template<typename... Other> | 
| auto & | emplace (Other &&... other) | 
|  | 
| void | reset () noexcept | 
|  | 
| void | swap (Optional &other) noexcept(std::is_nothrow_swappable_v< std::optional< Value > >) | 
|  | 
| decltype(auto) | operator-> () | 
|  | 
| decltype(auto) | operator-> () const | 
|  | 
| decltype(auto) | operator* () | 
|  | 
| decltype(auto) | operator* () const | 
|  | 
|  | operator bool () const noexcept | 
|  | 
| bool | hasValue () const noexcept | 
|  | 
| template<typename U > | 
| decltype(auto) | orFallback (U &&fallback) const & | 
|  | 
| template<typename U > | 
| decltype(auto) | orFallback (U &&fallback) & | 
|  | 
template<typename 
Value>
class Optional< Value >
A simple optional type. 
In new code, you should probably prefer using std::optional directly.
This is intended to stand-in for std::optional while JUCE's minimum supported language standard is lower than C++17. When the minimum language standard moves to C++17, this class will probably be deprecated, in much the same way that juce::ScopedPointer was deprecated in favour of std::unique_ptr after C++11.
This isn't really intended to be used by JUCE clients. Instead, it's to be used internally in JUCE code, with an API close-enough to std::optional that the types can be swapped with fairly minor disruption at some point in the future, but without breaking any public APIs.