boost::optional<internal_type> put_value(T v, typename std::enable_if<std::is_floating_point<T>::value>::type * = nullptr) { return internal_type(double(v)); }
internal_type make_node(Args && ... val) { return internal_type(std::forward<Args>(val)...); }
hresult(enumeration E): hresult_wrap(internal_type(E)) {}
boost::optional<internal_type> put_value( T v, typename std::enable_if<std::is_integral<T>::value>::type * = nullptr) { return internal_type(std::int64_t(v)); }
boost::optional<internal_type> put_value(std::string const &str) { return internal_type(str); }