# template struct utils::PropertyByValue

    #include <Property.h>

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

        C* instance;

        // construction

        PropertyByValue(C* instance);

        // methods

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

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

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