Funkcja seekg () kończy się niepowodzeniem

Próbuję napisać prosty kod, który odczyta plik tekstowy, ale dwukrotnie odczyta pierwszą linię. Myślałem, że to będzie tak proste, jak coś takiego

    std::ifstream file;
    file.open("filename", std::ios_base::in);
    std::string line;
    std::getline(file, line);
    // process line
    file.seekg(0, ios::beg);

    while (std::getline(file, line))
    {
        // process line
    }

Jednak seekg musi zawieść, ponieważ pierwsza linia nie jest przetwarzana dwukrotnie. Jakiś pomysł dlaczego?

UWAGA: To nie jest problem, z którym się borykam, ale jego uproszczona wersja, aby nie trzeba było wklejać kodu wielu klas i wielu funkcji. Prawdziwy problem polega na przekazywaniu wskaźnika pliku do wielu funkcji w wielu klasach. Pierwsza funkcja może, ale nie musi, zostać wywołana i wczyta pierwszą linię pliku. Druga funkcja odczytuje cały plik, ale najpierw musi wywołać seekg, aby upewnić się, że jesteśmy na początku pliku.

Właśnie użyłem powyższego kodu, aby uprościć dyskusję.