¿A que te referis con modificador? Ni isdigit ni cout tienen ningun efecto sobre la variable que se le pasa al primero ni la que se inserta al segundo, si podes asignar el valor de retorno de isdigit a una variable pero eso es otra cosa.
Para que isdigit pudiera asignarle un valor a su parametro tendria que recibirlo por referencia (eso se puede hacer con un puntero o una referencia; ver
https://www.genbeta.com/desarrollo/punteros-y-referencias) y no por valor como lo hace (ver
http://conclase.net/c/curso/cap15). Lo mismo pasa con el operador << cuando insertas en cout pero cin es diferente, cuando extraes le estas pasando un parametro por refrencia.
template< class Traits > basic_ostream<char,Traits>& operator<<(basic_ostream<char,Traits>& os, const char* s ); //insertar en cout
basic_istream& operator>>( int& value ); //extraer de cin
https://en.cppreference.com/w/cpp/string/byte/isdigithttps://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt2https://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgtEn las 3 primeras lineas de codigo que dejaste hay asignaciones, la primera es simplemente un literal de cadena, las 2 siguientes asignan el resultado de funciones (los metodos son funciones miembro de una clase) y en la 4 no cambia ninguna variable, se insertan 6 valores - de diferentes tipos y por eso se usan diferentes operadores (funciones) sobrecargados - en cout que los escribe en la consola o casi.
¿Como es posible insertar i en "\n"? ¿O peor aun como es posible que una funcion (std::endl es un manipulador) sea insertada en un float (f)? La clave esta en el valor de retorno del operador << que es basicamente una referencia a std::cout. En la ultima linea pasa esto:
operator<<(operator<<(operator<<(cout, s), "\n").operator<<(i), "\n").operator<<(f).operator<<(endl);
Notese que la variable cout solo se pasa UNA vez en toda la linea y los operadores la van retornando, con funciones miembro (caso en el que llama al operador con un solo parametro) y no miembro (cuando usa dos parametros siendo el primero el valor de retorno de otro operador, siempre la referencia a cout en nuestro ejemplo).