summaryrefslogtreecommitdiff
path: root/friendly_fusion.hpp
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2014-05-25 11:16:36 +0200
committerDennis Brentjes <d.brentjes@gmail.com>2014-05-25 11:16:36 +0200
commit84c15aecc7d296d25b7fd5ead6730f8d132d350f (patch)
treee5e435007c97105ad819f0df84da3027d2e82d9d /friendly_fusion.hpp
parentd4ea872acfee5d4bf563334181400a9fef7d5add (diff)
downloadgeneric-gui-84c15aecc7d296d25b7fd5ead6730f8d132d350f.tar.gz
generic-gui-84c15aecc7d296d25b7fd5ead6730f8d132d350f.tar.bz2
generic-gui-84c15aecc7d296d25b7fd5ead6730f8d132d350f.zip
Adds a initial implementation of a Form, as a proof-of-concept.
Diffstat (limited to 'friendly_fusion.hpp')
-rw-r--r--friendly_fusion.hpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/friendly_fusion.hpp b/friendly_fusion.hpp
index b014bd8..09ec920 100644
--- a/friendly_fusion.hpp
+++ b/friendly_fusion.hpp
@@ -126,4 +126,40 @@ struct struct_member_name : private traits::is_sequence<T, false>, public boost:
}
+namespace utils {
+
+template<typename T, int I>
+class DecayedTypeOfAtIndex {
+ typedef friendly_fusion::result_of::begin<T> begin;
+ typedef friendly_fusion::result_of::advance_c<typename begin::type, I> adv_it;
+ typedef friendly_fusion::result_of::deref<typename adv_it::type> deref;
+ typedef std::decay<typename deref::type> decayed;
+
+public:
+ typedef typename decayed::type type;
+};
+
+template<typename T, int I>
+class RefTypeOfAtIndex {
+ typedef friendly_fusion::result_of::begin<T> begin;
+ typedef friendly_fusion::result_of::advance_c<typename begin::type, I> adv_it;
+ typedef friendly_fusion::result_of::deref<typename adv_it::type> deref;
+
+public:
+ typedef typename deref::type type;
+};
+
+template<typename T, int I>
+class UnrefTypeOfAtIndex {
+ typedef friendly_fusion::result_of::begin<T> begin;
+ typedef friendly_fusion::result_of::advance_c<typename begin::type, I> adv_it;
+ typedef friendly_fusion::result_of::deref<typename adv_it::type> deref;
+ typedef std::remove_reference<typename deref::type> unrefed;
+
+public:
+ typedef typename unrefed::type type;
+};
+
+}
+
} \ No newline at end of file