Объект (возможно, не С++ 14, возможно, библиотека TS) make_optional определен (в n3672) как:
template <class T>
constexpr optional<typename decay<T>::type> make_optional(T&& v) {
return optional<typename decay<T>::type>(std::forward<T>(v));
}
Почему необходимо преобразовать тип T (т.е. не просто возвращать optional<T>), и существует ли философское (а также практическое) обоснование использования decay в частности как преобразование?