Durante l'apprendimento dei problemi di allineamento, mi sono reso conto che la mia implementazione di g ++ 4.9 (macports OS X) non supportava lo std::align
. Se provo a compilare (con -std=c++11
) questo codice di esempio da http://www.cplusplus.com/reference/memory/align/std :: align non supportato da g ++ 4.9
// align example
#include <iostream>
#include <memory>
int main() {
char buffer[] = "------------------------";
void * pt = buffer;
std::size_t space = sizeof(buffer) - 1;
while (std::align(alignof(int), sizeof(char), pt, space)) {
char* temp = static_cast<char*>(pt);
*temp = '*'; ++temp; space -= sizeof(char);
pt = temp;
}
std::cout << buffer << '\n';
return 0;
}
il compilatore sputa fuori l'errore
error: 'align' is not a member of 'std'
Questo sembra strano come g ++ sembra aver implementato il supporto di allineamento dal g ++ 4.8 , https://gcc.gnu.org/projects/cxx0x.html (N2341)
Il codice viene compilato in clang ++ senza problemi.
Si tratta di un problema ben noto di g ++ di cui non sono a conoscenza? I compilatori online che ho testato (ideone e coliru) rifiutano anche il codice.
Grazie per il link, appena visto che non ce l'ha fatta in g ++ 4.9 tronco, anche se il bug è stato segnalato più di un anno fa. – vsoftco
@vsoftco, "trunk g ++ 4.9" non ha senso. Non esiste "g ++ 4.9 trunk". C'è il ramo 4.9, e c'è il tronco, che è un ramo diverso. La correzione è stata apportata al bagagliaio. Il campo Target Milestone nella segnalazione bug dice che sarà in GCC 5.0 –
@JonathanWakely finalmente ottenuto :) – vsoftco