Добрый день.
Транслятор VS 2017.
Пишу простой код:
#include <fstream>
using namespace std;
void setposition(ifstream* ifsptr, streampos pos, ios::seek_dir d = ios::beg) {
ifsptr->clear();
ifsptr->seekg(pos, d);
}
int main() {
ifstream ifs;
ifs.open("a.txt");
setposition(&ifs, 0, ios::beg);
return 0;
}
Если выставить опцию С++14, то все транслируется.
Если выставить опцию С++17, то возникает ошибка:
error C2039: seek_dir: не является членом "std::basic_ios>"
Вопрос:
Спасибо.
UPD1:
А что делать, если требуется, чтобы код транслировался и на более старых версиях, например на VS 2010? Опять дефайнами исправлять косяки?
UPD2:
Господа/товарищи/братья/сестры не надо стирать слова "Добрый день" и "Спасибо" в моих или чьих-либо других постах. Никакой стаковерфлоу не отменяет правил эпистолярной вежливости в русском языке. Так же как не отменяет он правил грамматики, пунктуации, стилистики и личной гигиены.
void setposition(ifstream* ifsptr, streampos pos, ios::seekdir d = ios::beg)
{
Годится и для /std:c++14.
C самого начала стандартизованных времен (С++98) в стандартной библиотеке С++ типом для задания направления всегда был именно std::ios_base::seekdir. Никаких проблем с использованием std::ios_base::seekdir в более ранних реализациях у вас не будет. Вы должны были использовать именно этот тип с самого начала.
А тип std::ios_base::seek_dir всегда являлся deprecated. Этот тип существовал в std::ios_base на "птичьих" правах только для обратной совместимости с достандартными реализациями.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей