Clang> = 3.3 en modo c ++ 1y no puede analizar el encabezado <cstdio>

Tengo un proyecto que compila correctamente y se ejecuta en g ++ 4.8.1 y clang> = 3.3 en modo c ++ 11. Sin embargo, cuando me cambio al experimental-std=c++1y el modo, el estruendo 3.3 (pero no g ++) ahoga en el<cstdio> encabezado que se incluye indirectamente por medio de Boost.Test (así que no puedo cambiarlo fácilmente por mí mismo)

// /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
// ...
}

con el siguiente mensaje de error:

/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/cstdio:119:11: error: ningún miembro llamado 'gets' en el global espacio de nombres

Eneste tutorial sobre cómo configurar un entorno C ++ moderno, un problema de búsqueda similar conmax_align_t se encuentra La recomendación es usar un script sed para rodear los símbolos desconocidos con#ifdef __clang__ Macros, pero eso parece un enfoque frágil.

Configuración: Linux Mint 15 simple de 64 bits con

g ++ (Ubuntu 4.8.1-2ubuntu1 ~ 13.04) 4.8.1

Ubuntu clang versión 3.3-3 ~ raring1 (branches / release_33) (basado en LLVM 3.3)

Preguntas:

¿Qué está causando este error? No hay__clang__ macro en cualquier lugar cerca del código en cuestión, y el clang en el modo c ++ 11 no tiene ningún problema.¿Es un problema de lenguaje (C ++ 14 dice algo más que C ++ 11 sobre la importación de símbolos compatibles con C del global a lastd espacio de nombres)?¿Necesito cambiar algo con mis rutas de inclusión? (Uso CMake para seleccionar automáticamente las rutas del encabezado y cambiar los modos dentro de CMakeLists.txt)¿Clang tiene un interruptor para resolver esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta