I was looking at the API for std::optional<T> on cppreference. I was curious how value_or would work. Looking there, it seems there are two overloads:
template< class U >
constexpr T value_or( U&& value ) const&;
template< class U >
T value_or( U&& value ) &&;
What are the const& and && trailing the function declaration? What is the difference between declaring a function as const and declaring it as const&?