See the question and my original answer on StackOverflow

float3 is the standard WinRT projected type for C++. What you want to use in the idl (which is supposed to be language agnostic) is the Windows.Foundation.Numerics.Vector3 WinRT type and float3 in all .h or .cpp files, something like this:

class.idl:

namespace RuntimeComponent1
{
    [default_interface]
    runtimeclass Class
    {
        Class();
        Int32 MyProperty;
        Windows.Foundation.Numerics.Vector3 Position();
    }
}

class.h:

#pragma once

#include "Class.g.h"

namespace winrt::RuntimeComponent1::implementation
{
    struct Class : ClassT<Class>
    {
        Class() = default;

        int32_t MyProperty();
        void MyProperty(int32_t value);
        Windows::Foundation::Numerics::float3 Position();
    };
}

namespace winrt::RuntimeComponent1::factory_implementation
{
    struct Class : ClassT<Class, implementation::Class>
    {
    };
}

class.cpp:

#include "pch.h"
#include "Class.h"
#include "Class.g.cpp"

namespace winrt::RuntimeComponent1::implementation
{
    int32_t Class::MyProperty()
    {
        throw hresult_not_implemented();
    }

    void Class::MyProperty(int32_t /* value */)
    {
        throw hresult_not_implemented();
    }

    Windows::Foundation::Numerics::float3 Class::Position()
    {
        throw hresult_not_implemented();
    }
}