tengo las siguientes sobrecargas plantilla dos funciones:const unificador T & y T && sobrecarga
template<typename T>
optional<T> some(const T& x)
{
return optional<T>(x);
}
template<typename T>
typename std::enable_if<std::is_rvalue_reference<T&&>::value, optional<T> >::type
some(T&& x)
{
return optional<T>(std::move(x));
}
Mi primer intento de unificar las sobrecargas vía perfecta expedición fracasó:
template<typename T>
optional<T> some(T&& x)
{
return optional<T>(std::forward<T>(x));
}
error: forming pointer to reference type 'const std::basic_string<char>&'
al igual que mi segundo intento:
template<typename T>
optional<typename std::remove_reference<T>::type> some(T&& x)
{
return optional<typename std::remove_reference<T>::type>(std::forward<T>(x));
}
error: no matching function for call to
'std::basic_string<char>::basic_string(gpa::optional<const std::basic_string<char> >)'
¿Hay una forma clara de unificar las sobrecargas, o debería simplemente vivir con ellas?
Debe proporcionar una definición de lo que 'opcional <>' es. –
Es básicamente un clon de juguete de 'boost :: optional'. – fredoverflow
... Y sin embargo, la pregunta es, ¿puedes proporcionar la definición? Tengo la sensación de que el problema es con la interfaz de 'opcional' (es decir, el reenvío perfecto es la solución para' algunos', puede que necesite modificarlo para que quepa 'opcional') –