Clang> = 3.3 в режиме c ++ 1y не может разобрать заголовок <cstdio>

У меня есть проект, который правильно компилируется и работает под g ++ 4.8.1 и clang> = 3.3 в режиме c ++ 11. Тем не менее, когда я переключаюсь на экспериментальную-std=c++1y режим, лязг 3,3 (но не G ++) дроссели на<cstdio> заголовок, который косвенно включается с помощью Boost.Test (поэтому я не могу легко изменить его сам)

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

со следующим сообщением об ошибке:

/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/cstdio:119:11: ошибка: ни один член с именем 'gets' в глобальном Пространство имен

Наэтот урок о том, как настроить современную среду C ++, аналогичная проблема поиска сmax_align_t встречается. Рекомендуется использовать скрипт sed, чтобы окружить неизвестные символы#ifdef __clang__ макросы, но это кажется хрупким подходом.

Установка: обычный 64-битный Linux Mint 15 с

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

Ubuntu clang версия 3.3-3 ~ raring1 (branch / release_33) (на основе LLVM 3.3)

Вопросов:

что вызывает этот erorr? Здесь нет__clang__ макрос где-то рядом с рассматриваемым кодом, и clang в режиме c ++ 11 не имеет никаких проблем.Это языковая проблема (говорит ли C ++ 14 что-то еще, кроме C ++ 11, об импорте C-совместимых символов из глобальных вstd Пространство имен)?Нужно ли что-то изменить с помощью моих путей включения? (Я использую CMake для автоматического выбора путей заголовка и переключения режимов внутри CMakeLists.txt)У clang есть переключатель, чтобы решить эту проблему?

Ответы на вопрос(0)

Ваш ответ на вопрос