ios::seek_dir и стандарт С++2017

124
26 февраля 2018, 01:56

Добрый день.

Транслятор 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>"

Вопрос:

  1. Как теперь обратиться к этому перечислению?

Спасибо.

UPD1:

А что делать, если требуется, чтобы код транслировался и на более старых версиях, например на VS 2010? Опять дефайнами исправлять косяки?

UPD2:

Господа/товарищи/братья/сестры не надо стирать слова "Добрый день" и "Спасибо" в моих или чьих-либо других постах. Никакой стаковерфлоу не отменяет правил эпистолярной вежливости в русском языке. Так же как не отменяет он правил грамматики, пунктуации, стилистики и личной гигиены.

Answer 1
void setposition(ifstream* ifsptr, streampos pos, ios::seekdir d = ios::beg) 
{

Годится и для /std:c++14.

Answer 2

C самого начала стандартизованных времен (С++98) в стандартной библиотеке С++ типом для задания направления всегда был именно std::ios_base::seekdir. Никаких проблем с использованием std::ios_base::seekdir в более ранних реализациях у вас не будет. Вы должны были использовать именно этот тип с самого начала.

А тип std::ios_base::seek_dir всегда являлся deprecated. Этот тип существовал в std::ios_base на "птичьих" правах только для обратной совместимости с достандартными реализациями.

READ ALSO
Шаблоны. Специализация

Шаблоны. Специализация

Верные ли утверждения: 1Полная специализация есть для функций и классов 2

164
Сортировка Шелла

Сортировка Шелла

Преподаватель сказал, что строка for (int j = i - step; j >= 0; j = j - step) портит всю суть сортировки Шелла и сказал переделать таким образом, чтобы использовать...

141
Размер buffer`а

Размер buffer`а

Использую следующий код:

158