Proszę spojrzeć na poniższym fragmencie C++ 11:dzyń ++ kompiluje tylko C++ 11 program przy użyciu boost :: formatu gdy -std = C++ 11 opcja jest odrzucany
#include <boost/format.hpp>
int main(int argc, char** argv)
{
auto s = boost::format("");
return 0;
}
Kiedy skompilować to z brzękiem Używanie -std=c++11
pojawia się następujący błąd:
$ clang++ -std=c++11 -o main main.cpp
In file included from main.cpp:1:
In file included from /usr/include/boost/format.hpp:19:
In file included from /usr/include/boost/detail/workaround.hpp:41:
In file included from /usr/include/boost/config.hpp:40:
In file included from /usr/include/boost/config/select_stdlib_config.hpp:18:
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../../include/c++/4.9.0/cstddef:51:11: error:
no member named 'max_align_t' in the global namespace
using ::max_align_t;
~~^
1 error generated.
bez -std=c++11
wszystko kompiluje grzywny, ale brzękiem drukuje ostrzeżenie:
$ clang++ -o main main.cpp
main.cpp:5:3: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
auto s = boost::format("");
^
Wygląda na to, że rozwiązaniem jest usunięcie flagi C++ 11, ponieważ obecna wersja języka wydaje się być w trybie C++ 11? Wadą jest to, że otrzymasz wiele ostrzeżeń.
Czy istnieje lepsze obejście problemu przy całkowitej zmianie na gcc? Poprawianie kodu źródłowego boost :: format lub gcc-libs jest dla mnie w porządku. Informacje
System:
- Platforma: Arch Linux x86_64
- wersja doładowania: 1.55.0-6
- gcc-libs: 4.9.0-1
- dzyń ++: 3.4 (znaczniki/RELEASE_34/final)
brzmi jak [błędu z brzękiem z libstdC++ 4.9] (https://bbs.archlinux.org/viewtopic.php?pid=1412317). – Chnossos
Przypomnienie: nie można po prostu upuścić 'std = C++ 11' na jednej JT, aby obejść wszelkie problemy, ponieważ to potencjalnie może złamać ODR dla wszystkich jednostek zadeklarowanych w (zawartych w nagłówkach) tej TU. Na tej ścieżce leży [UB] (http://en.wikipedia.org/wiki/Undefined_behavior). Tak więc upuszczenie C++ 11 oznaczałoby zrzucenie go dla całego twojego projektu (chyba że twoja JT nie zawiera nic) – sehe
Działa wspaniale z libC++ zamiast libstdC++, oraz z libstdC++, które pochodziło z gcc 4.8. Podejrzewam, że to była ta zmiana: http://gcc.gnu.org/gcc-4.9/porting_to.html (szukaj max_align_t) –