la función seekg () falla

Estoy intentando escribir un código simple que leerá un archivo de texto pero leerá la primera línea dos veces. Pensé que esto sería tan simple como algo como esto.

    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
    }

Sin embargo, la búsqueda debe fallar ya que la primera línea no se procesa dos veces. ¿Alguna idea de por qué?

TENGA EN CUENTA: este no es el problema con el que me enfrento, sino una versión simplificada del mismo para no tener que pegar código de varias clases y funciones múltiples. El problema real consiste en que se pasa un puntero a varias funciones en varias clases. La primera función puede o no ser llamada y lee la primera línea del archivo. La segunda función lee todo el archivo, pero primero debe llamar a search para asegurarse de que estamos al principio del archivo.

Acabo de usar el código anterior para simplificar la discusión.

Respuestas a la pregunta(2)

Su respuesta a la pregunta