Объект (возможно, не С++ 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
в частности как преобразование?