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?

questionAnswers(1)

yourAnswerToTheQuestion