8    struct IPhWidgetsProperty
 
   10        template<
class ReturnT, 
class W
idgetClassT, 
class ArgumentT, ArgumentT ArgumentID>
 
   11        inline ReturnT getArgument()
 const 
   13            return static_cast<const WidgetClassT*
>(
this)->resource.argument[ArgumentID].get();
 
   16        template<
class ValueT, 
class W
idgetClassT, 
class ArgumentT, ArgumentT ArgumentID>
 
   17        inline void setArgument(ValueT val)
 
   19            static_cast<const WidgetClassT*
>(
this)->resource.argument[ArgumentID].set(val);
 
   23    template<
class ValueT = void,
 
   24        const cppproperties::detail::property_flag::e_property_flag Flag = (
const cppproperties::detail::property_flag::e_property_flag)(cppproperties::detail::flag_chooser<ValueT>::flag)>
 
   29    class phproperty<void, cppproperties::detail::property_flag::ro> :
 
   30        public cppproperties::detail::property_flag
 
   33        typedef cppproperties::detail::property_flag flags;
 
   37    class phproperty<void, cppproperties::detail::property_flag::wo> :
 
   38        public cppproperties::detail::property_flag
 
   41        typedef cppproperties::detail::property_flag flags;
 
   45    class phproperty<void, cppproperties::detail::property_flag::rw> :
 
   46        public cppproperties::detail::property_flag
 
   49        typedef cppproperties::detail::property_flag flags;
 
   53    template<
typename ValueT>
 
   54    class phproperty<ValueT, cppproperties::detail::property_flag::ro>
 
   56        typedef cppproperties::property<ValueT, cppproperties::detail::property_flag::ro> cpp_property_t;
 
   58        template<class WidgetClassT, typename cppproperties::detail::property_info<ValueT, WidgetClassT>::getter_t Getter>
 
   59        struct bind_internal :
 
   60            public cpp_property_t::template bind<WidgetClassT, Getter>
 
   62            explicit bind_internal(WidgetClassT *parent) :
 
   63                cpp_property_t::template bind<WidgetClassT, Getter>(parent)
 
   67            inline bind_internal &operator=(ValueT 
const &);
 
   68            inline bind_internal &operator=(bind_internal 
const &);
 
   72        template<
class W
idgetClassT, 
class ArgumentT, ArgumentT ArgumentID>
 
   76                &IPhWidgetsProperty::getArgument<ValueT, WidgetClassT, ArgumentT, ArgumentID>
 
   79            typedef bind_internal<
 
   81                &IPhWidgetsProperty::getArgument<ValueT, WidgetClassT, ArgumentT, ArgumentID> 
 
   85            explicit bind(WidgetClassT *parent) :
 
   90            inline bind &operator=(ValueT 
const &);
 
   91            inline bind &operator=(bind 
const &);
 
   97    template<
typename ValueT>
 
   98    class phproperty<ValueT, cppproperties::detail::property_flag::rw>
 
  100        typedef cppproperties::property<ValueT, cppproperties::detail::property_flag::rw> cpp_property_t;
 
  102        template<class WidgetClassT, typename cppproperties::detail::property_info<ValueT, WidgetClassT>::getter_t Getter, 
typename cppproperties::detail::property_info<ValueT, WidgetClassT>::setter_t Setter>
 
  103        struct bind_internal :
 
  104            public cpp_property_t::template bind<WidgetClassT, Getter, Setter>
 
  106            explicit bind_internal(WidgetClassT *parent) :
 
  107                cpp_property_t::template bind<WidgetClassT, Getter, Setter>(parent)
 
  110            using cpp_property_t::template bind<WidgetClassT, Getter, Setter>::operator=;
 
  115        template<
class W
idgetClassT, 
class ArgumentT, ArgumentT ArgumentID>
 
  117            public bind_internal<
 
  119                &IPhWidgetsProperty::getArgument<ValueT, WidgetClassT, ArgumentT, ArgumentID>,
 
  120                &IPhWidgetsProperty::setArgument<ValueT, WidgetClassT, ArgumentT, ArgumentID>
 
  123            typedef bind_internal<
 
  125                &IPhWidgetsProperty::getArgument<ValueT, WidgetClassT, ArgumentT, ArgumentID>,
 
  126                &IPhWidgetsProperty::setArgument<ValueT, WidgetClassT, ArgumentT, ArgumentID>
 
  130            explicit bind(WidgetClassT *parent) :
 
  134            using cpp_bind_t::operator=;
 
  139    template<
typename ValueT>
 
  140    class phproperty<ValueT, cppproperties::detail::property_flag::wo>
 
  142        typedef cppproperties::property<ValueT, cppproperties::detail::property_flag::wo> cpp_property_t;
 
  144        template<class WidgetClassT, typename cppproperties::detail::property_info<ValueT, WidgetClassT>::setter_t Setter>
 
  145        struct bind_internal :
 
  146            public cpp_property_t::template bind<WidgetClassT, Setter>
 
  148            bind_internal(WidgetClassT *parent) :
 
  149                cpp_property_t::template bind<WidgetClassT, Setter>(parent)
 
  152            using cpp_property_t::template bind<WidgetClassT, Setter>::operator=;
 
  156        template<
class W
idgetClassT, 
class ArgumentT, ArgumentT ArgumentID>
 
  158            public bind_internal<
 
  160                &IPhWidgetsProperty::setArgument<ValueT, WidgetClassT, ArgumentT, ArgumentID>
 
  163            typedef bind_internal<
 
  165                &IPhWidgetsProperty::setArgument<ValueT, WidgetClassT, ArgumentT, ArgumentID>
 
  169            explicit bind(WidgetClassT *parent) :
 
  173            using cpp_bind_t::operator=;