Каждый компилятор имеет свой набор реализованных и не реализованных функций стандарта, что печально, но это жизнь.
При попытке скомпилировать наш проект для VS в MinGW, я получил ошибку
std::defaultfloat
ERROR: "defaultfloat" is not member of "std"
Кажется, что его функция C ++ 11 до сих пор не реализована.
Я хотел бы сделать условный код, чтобы избежать этой ошибки, но не удаляя функцию:
#ifdef std::defaultfloat
stream << std::defaultfloat << value;
#else
// My own temporal equivalent
#endif
Это, конечно, не работает, причина пространства имен, и мне интересно, есть ли лучшая альтернатива инструкциям прекомпилятора.
Почему бы просто не написать:
stream.unsetf(std::ios_base::floatfield);
stream << value;
Это будет просто работать. (Это не так красиво, но это красивее, чем #ifdef
с.)
Или вы можете написать свой собственный манипулятор, который делает то же самое.
Других решений пока нет …