/**
 * 
 * 'using namespace' Hace publico los miembros de un espacio de nombres.
 * Si tienes varias funciones con el mismo nombre, puedes separarlas en
 * espacios.
 * 
 * Compilar:
 * 
 *     g++ -o espacio espacio.cpp
 * 
 */
#include <iostream>

/* El espacio std definido en iostream contiene los prototipos de las
 * funciones de la libreria estandar de c++, constantes como endl,
 * uniones, etc. */
using namespace std;

/* espacio de nombres a */
namespace a
{
	/* constante ok, vale 0 */
	const int ok = 0;
	
	void funcion()
	{
		cout << "Funcion del espacio a\n";
	}
}

/* espacio de nombres b */
namespace b
{
	/* constante ok, vale 0 */
	const int ok = 0;
	
	void funcion()
	{
		cout << "Funcion del espacio b\n";
	}
}

/* accedemos directamente a los miembros del espacio a */
using namespace a;
/* Estamos utilizando dos espacios ahora, a y std, pero no podriamos
 *  utilizar a y b juntos, ya que 'void funcion()' existe en ambos...
 * dada una llamada a funcion(), no se pude determinar a cual de las
 * dos se refiere. */

int main()
{
	/* utilizamos el operador de resolucion de ambito
	 *  para llamar a funcion del espacio b */
	b::funcion();
	
	a::funcion(); /* funcion del espacio a con resolucion
	  de ambito (realmente no hace falta) */
	
	funcion(); /* funcion del espacio a */
	
	/* ok es una constante que existe en ambos espacios y vale 0 */
	return ok;
}
