#if __cplusplus >= 201103L
template <class _Key, class _Tp>
union __value_type
{
typedef _Key key_type;
typedef _Tp mapped_type;
typedef pair<const key_type, mapped_type> value_type;
typedef pair<key_type, mapped_type> __nc_value_type;
value_type __cc;
__nc_value_type __nc;
template <class ..._Args>
_LIBCPP_INLINE_VISIBILITY
__value_type(_Args&& ...__args)
: __cc(std::forward<_Args>(__args)...) {}
_LIBCPP_INLINE_VISIBILITY
__value_type(const __value_type& __v)
: __cc(__v.__cc) {}
_LIBCPP_INLINE_VISIBILITY
__value_type(__value_type& __v)
: __cc(__v.__cc) {}
_LIBCPP_INLINE_VISIBILITY
__value_type(__value_type&& __v)
: __nc(std::move(__v.__nc)) {}
_LIBCPP_INLINE_VISIBILITY
__value_type& operator=(const __value_type& __v)
{__nc = __v.__cc; return *this;}
_LIBCPP_INLINE_VISIBILITY
__value_type& operator=(__value_type&& __v)
{__nc = std::move(__v.__nc); return *this;}
_LIBCPP_INLINE_VISIBILITY
~__value_type() {__cc.~value_type();}
};
#else
// definition for C++03...
Es sieht aus wie der Zweck auch zu machen __value_type
belegbare und beweglich ist, während in der Lage, den Inhalt als pair<const key_type, mapped_type>
(das ist der Wert Art von Iteratoren ist und so weiter) zu belichten. Aber ich sehe nicht, warum es zuweisbar oder beweglich sein muss, da ich keinen Grund sehe, warum die Implementierung jemals Knoten innerhalb einer Karte kopieren oder verschieben müsste oder irgendetwas anderes tun würde, als sie zu konstruieren und zu zerstören - Platziere Zeiger und konfiguriere sie neu.Warum benutzt libC++ diese Karte?
Haben Sie versucht, die Datei nach Verwendungen von '__nc' zu durchsuchen? Beachten Sie, dass die von dieser Union vorgeschlagene Verwendung nicht konform ist. – Potatoswatter
@Potatoswatter Ja, es wird nur zur Implementierung der angezeigten Elemente verwendet. – Brian
Dies könnte ein Fehler in der Kernsprache, der Bibliothek oder beidem sein. Üblicherweise soll die Bibliothek mit der Sprache umsetzbar sein. Möchten Sie das Problem melden? – Potatoswatter