Clang> = 3.3 w trybie c ++ 1y nie może analizować nagłówka <cstdio>
Mam projekt, który poprawnie kompiluje i działa w g ++ 4.8.1 i clang> = 3.3 w trybie c ++ 11. Jednak kiedy przełączam się na eksperymentalne-std=c++1y
tryb, clang 3.3 (ale nie g ++) dławi w<cstdio>
nagłówek, który jest pośrednio zawarty w Boost.Test (więc nie mogę go łatwo zmienić)
// /usr/include/c++/4.8/cstdio
#include <stdio.h>
// Get rid of those macros defined in <stdio.h> in lieu of real functions.
// ...
#undef gets
// ...
namespace std
{
// ...
using ::gets; // <-- error with clang++ -std=c++1y
// ...
}
z następującym komunikatem o błędzie:
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/cstdio:119:11: błąd: żaden członek o nazwie „dostaje” w globalnym przestrzeń nazw
Naten samouczek jak skonfigurować nowoczesne środowisko C ++, podobny problem wyszukiwaniamax_align_t
napotkany. Zaleca się użycie skryptu sed do objęcia nieznanych symboli za pomocą#ifdef __clang__
makra, ale to wydaje się kruchym podejściem.
Ustawienia: zwykły 64-bitowy Linux Mint 15 z
g ++ (Ubuntu 4.8.1-2ubuntu1 ~ 13.04) 4.8.1
Ubuntu clang wersja 3.3-3 ~ raring1 (branches / release_33) (na podstawie LLVM 3.3)
pytania:
co powoduje ten erorr? Nie ma__clang__
makro w dowolnym miejscu kodu, którego to dotyczy, i clang w trybie c ++ 11 nie ma żadnych problemów.Czy jest to problem językowy (czy C ++ 14 mówi coś innego niż C ++ 11 o importowaniu symboli kompatybilnych z C z globalnego dostd
przestrzeń nazw)?Czy muszę coś zmienić za pomocą moich ścieżek dołączania? (Używam CMake do automatycznego wybierania ścieżek nagłówka i przełączania trybów wewnątrz CMakeLists.txt)Czy clang ma przełącznik, aby rozwiązać ten problem?