Макро DOMAIN
в math.h сталкивается с перечислениями и, возможно, другими типами. Я не знаю, что с этим делать.math.h macro collisions
#include <algorithm>
enum Type { DOMAIN };
int main(){
Type t = Type::DOMAIN;
return 0;
}
Скомпилировать с флагом -std = C++ 11. Версия C99 этого кода компилирует прекрасно, хотя:
#include <algorithm>
enum Type { DOMAIN };
int main(){
Type t = DOMAIN;
return 0;
}
Я проверил исходный код и библиотеки виноват. Алгоритм включает в себя stl_algo.h, в котором есть IFDEF:
#if __cplusplus >= 201103L
#include <random> // for std::uniform_int_distribution
#include <functional> // for std::bind
#endif
Следующий код компилирует штраф на C++ 11 компилятора:
#include <random>
#include <iostream>
int main(){
std::cout << DOMAIN << std::endl;
return 0;
}
ли это функция или ошибка?
EDIT * загрязнен фикс:
#ifdef DOMAIN
#undef DOMAIN
#endif
«ДОМЕН» макрос? Откуда это происходит? Я не могу найти его ни в C++ 1z, ни в C11 черновиках. – dyp
Huh. Это похоже на функцию 'matherr' System V Unix, а не C или C++. Макрос '__USE_MISC' установлен (см.' Features.h' glibc); иначе 'math.h' не будет определять макрос' DOMAIN'. Возможно, в режиме '_ISOC11_SOURCE' можно отключить' _DEFAULT_SOURCE', чтобы избавиться от '__USE_MISC'. - Редактирование: ... это кажется более сложным, чем это – dyp