2015-12-18 16 views

risposta

3

Solo perché lo Standard cita ~reference() come un distruttore, non significa che deve essere fornito dall'utente come un no-op {} (che è come libstdc++ e SGI/STL lo fanno). Potrebbe anche essere dichiarato dall'utente come =default o anche lasciato implicitamente definito (che è come lo fa libc++). Indipendentemente da ciò, lo standard potrebbe essere aggiornato per fare in modo che questa distrazione venga rimossa dal distruttore. Potresti presentare un cambiamento editoriale (non credo che giustifichi una proposta reale).

Come indicato da @BoPersson nei commenti, std::bitset è un componente molto vecchio della libreria standard. Molte delle sue funzioni (costruttore implicito da numero intero senza segno, membro anziché non membro operator==) pre-data la standardizzazione della lingua nel 1998. Tappi senza vergogna: vedi per es. this Q&A per ulteriori discussioni su come questo potrebbe essere sorto, e this Q&A per il motivo per cui potrebbe interrompere il codice quando questo sarebbe stato risolto.

<rant mode>

Il modo migliore per uscire l'eredità di std::bitset sarebbe un taglio netto in namespace experimental. Preferibilmente, questo risolverebbe anche l'astrazione mista di std::bitset, che allo stesso tempo cerca di essere una versione ottimizzata per lo spazio di array<bool> e uno set<int>. Idealmente, ci sarebbe una proposta per uno bool_array<N> e uno bounded_int_set<N> che ha fornito queste astrazioni. Allo stesso modo, è possibile definire bool_vector<Alloc> (attualmente noto come vector<bool, Alloc>) e int_set<Alloc> (attualmente una miscela di boost::dynamic_bitset e boost::container::flat_set<int, Alloc>).

</rant mode>