¿Por qué std :: getline () omite la entrada después de una extracción formateada?

Tengo el siguiente código que solicita al usuario su nombre y estado:

#include <iostream>
#include <string>

int main()
{
    std::string name;
    std::string state;

    if (std::cin >> name && std::getline(std::cin, state))
    {
        std::cout << "Your name is " << name << " and you live in " << state;
    }
}

Lo que encuentro es que el nombre se extrajo con éxito, pero no el estado. Aquí está la entrada y la salida resultante:

Input:

"John"
"New Hampshire"

Output:

"Your name is John and you live in "

¿Por qué se ha omitido el nombre del estado de la salida? He dado la entrada adecuada, pero el código de alguna manera lo ignora. ¿Por qué pasó esto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta