    #include <iostream>

    struct TestStructure;

    void TestFunction(TestStructure*);  // forward declaration

    struct TestStructure {
        int i;
        void TestFunction(TestStructure* /*unused*/) {
            std::cout << "TestStructure TestFunction\n";
        }
        void foo() {
            std::cout << "From foo:\n";
            TestFunction(this);
            std::cout << "::TestFunction:\n";
            ::TestFunction(this);
        }
    };

    void TestFunction(TestStructure* /*unused*/) {
        std::cout << "Free TestFunction\n";
    }

    int main() {
        std::cout << "From main:\n";
        TestFunction(nullptr);

        TestStructure t;
        t.foo();
    }
