Hallo ich an einem std::optional
Implementierungen hier bei here und ich habe diesen Code-Schnipsel gefunden Suche verwirrt mich:Was macht const_forward bei der optionalen Implementierung in C++?
// workaround: std utility functions aren't constexpr yet
template <class T> inline constexpr T&& constexpr_forward(typename
std::remove_reference<T>::type& t) noexcept
{
return static_cast<T&&>(t);
}
diese So verstehe ich nicht auf die folgende Weise:
- Was macht
typename
hier? Nur um den folgenden Teil zu deklarieren, ist ein Typ? - Warum brauchen wir
std::remove_reference
hier? Haben wir nicht die Referenz zurück in dentype&
Teil hinzugefügt? - Was bedeutet "std Utility-Funktionen sind noch nicht Constexpr"? Wie macht diese Funktion sie zu Constexpr? Der Körper ist nur ein
static_cast
. - Diese Funktion wird in einer Reihe von Konstruktoren verwendet und es sieht so aus:
template <class... Args> constexpr storage_t(Args&&... args) : value_(constexpr_forward<Args>(args)...) {}
, also was macht es hier zu args?
Vielen Dank.
Es produktiver sein kann, zu einer Zeit, eine klare Frage zu stellen (nach SO nach Duplikaten zu suchen.) – juanchopanza