# template struct utils::Property

    #include <Property.h>

    template <typename C, typename T, T(C::*)() const getter, void(C::*)(const T&) setter>
    struct Property {
        // fields

        C* instance;

        // construction

        Property(C* instance);

        // methods

        operator T() const;
        Property& operator=(const T& value);

        template <typename C2, typename T2, T2(C2::*)() getter2, void(C2::*)(const T2&) setter2>
        Property& operator=(const Property<C2, T2, getter2, setter2>& other);

        Property& operator=(const Property& other);
    };