Podczas nauki o problemach z wyrównaniem itp. Zdałem sobie sprawę, że moja implementacja g ++ 4.9 (macports OS X) nie ma wsparcia dla std::align
. Gdy próbuję skompilować (z -std=c++11
) ten przykładowy kod z http://www.cplusplus.com/reference/memory/align/std :: align nie obsługiwany przez 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;
}
kompilator wypluwa błąd
error: 'align' is not a member of 'std'
To wydaje się dziwne, jak g ++ wydaje się być realizowane wsparcie wyrównania ponieważ g ++ 4.8 , https://gcc.gnu.org/projects/cxx0x.html (N2341)
Kod kompiluje się pod klang ++ bez żadnych problemów.
Czy jest to znany problem z g ++, którego nie znam? Kompilatory online, które przetestowałem (ideone i coliru) również odrzucają kod.
Dzięki za link, tylko widział, że nie udało się w g ++ 4.9 bagażniku, choć błąd został zgłoszony więcej niż rok temu. – vsoftco
@vsoftco, "bagażnik g ++ 4.9" nie ma sensu. Nie ma tu pnia "g ++ 4.9". Istnieje gałąź 4.9, a tam jest pień, który jest inną gałęzią. Poprawka została wprowadzona do bagażnika. Pole Cel milowy w raporcie o błędzie mówi, że będzie ono w GCC 5.0 –
@ JonathanWakely w końcu to dostało :) – vsoftco