namespace Test
{

    class cTest
    {
    public:
        float Temp;
    };

    class cTest2
    {
    public:
        cTest Calculate()
        {
            cTest TempTest;
            return TempTest;
        };
    };

    //This class is implemented to show that it's not the namespace location that causes the compile error to occur.
    //Used only in Method 2
        class cTest3
        {
        public:

            cTest2 TempTest2_Obj;
            int ReturnValue;

            int TestFunction()
            {
                ReturnValue = TempTest2_Obj.Calculate(); //The compiler looks up the object and finds an entry for Calculate,
                					 //and settles on the 'v' (Or void/no arguments) entry, but somehow it knows
                					 //its return type is of cTest, without name decoration!
                return ReturnValue;
            };
        };
};

int main()
{
//Method 1 of demonstrating the function selection problem.
/** /
    Test::cTest2 TempObj1;
    Test::cTest2 TempObj2;

    TempObj1 = TempObj2.Calculate();
/**/

//Method 2 of demonstrating the function selection problem.
/**/
    Test::cTest3 TempObj3;
    TempObj3.TestFunction();
/**/

	return 0;
};