下記コードを実行する際、namespace でくくったはずの関数がそのまま使用できてしまうのは
namespace の仕様なのでしょうか?
namespace Test 内で宣言した Vector2 構造体を使用しているか否かで
コンパイル時の成否が変わってしまっています。
AddVector() には Test:: を付けても付けなくてもコンパイルが成功してしまっているのが解せません。

AddVector() 自身を namespace Util{} など別名でくくると
コンパイル時
Util::AddVecro(); // NG
Test::Util::AddVector(); // OK
となります。

#include <stdlib.h>

namespace Test {
    struct Vector2 {
        float x;
        float y;
    };

    float AddFloat(float a, float b) {
        return a + b;
    }

    Vector2 AddVector(const Vector2& srcA, const Vector2& srcB) {
        Vector2 add;
        add.x = srcA.x + srcB.x;
        add.y = srcA.y + srcB.y;
        return add;
    }
}    // namespace Test

int main(int argc, char *argv[] ) {
    float floatTest[2];
    float floatAdd1 = AddFloat(floatTest[0], floatTest[1]);    // NG
    float floatAdd2 = Test::AddFloat(floatTest[0], floatTest[1]);    // OK

    Test::Vector2 test[2];
    Test::Vector2 add;
    add = AddVector(test[0], test[1]);    // OK

    return 0;
}