Während Umsetzungstd::experimental::optional
(cppreference.com) Ich habe durch die Angabe eines bestimmten Konstruktor verwechselt, nämlich:std :: Versuchs :: optional <T> Implementierung: constexpr Konstruktor Verwirrung
constexpr optional(const T& value); // (4)
(Source)
Dieser Konstruktor erlaubt optional<T>
, für einen trivial zerstörbaren Typ T
, in constexpr
Kontext konstruiert werden. Während die erste Anforderung, nämlich das Ausschalten des vom Benutzer bereitgestellten Destruktors in diesem Fall optional<T>
ein Literal-Typ zu machen, einfach zu lösen ist, weiß ich nicht, wie man die Begrenzung von umgehen kann, die in consstexpr nicht erlaubt ist .
Ich dachte, ich sollte optional<T>
mit 10 implementieren, um Typen T
, die nicht standardmäßig konstruierbar sind und alle Ausrichtungsanforderungen erfüllen, falls zutreffend. Aber wie gesagt, constexpr
verbietet mir die Verwendung von Placement neu in diesem bestimmten Konstruktor.
Hatte ich zu viel Kaffee und sehe hier keine offensichtliche Lösung?
Danke
Mögliche Duplikate von [Wie sollte man std :: optional verwenden?] (Http://stackoverflow.com/questions/16860960/how-should-one- use-stdoptional) – Matriac
@Matriac das ist eine Frage über die Implementierungsseite. – nshct
Eine "Union" könnte für diesen speziellen Konstruktor funktionieren, aber ich bin nicht sicher, dass es ausreicht, alle Fälle zu behandeln. – hvd