+ Value(T &&d, typename std::enable_if<!std::is_same<typename std::remove_reference<T>::type, Value>::value, int>::type = 0):
+ sig(TypeInfo<T>::signature),
+ data(static_cast<typename TypeInfo<T>::Store>(std::forward<T>(d)))
+ { }
+
+ Value(const Symbol &d): sig(TypeInfo<Symbol>::signature), data(d) { }
+ Value(Symbol &&d): sig(TypeInfo<Symbol>::signature), data(std::move(d)) { }
+
+ template<typename T>
+ typename TypeInfo<T>::Load get() const
+ { return get_<typename TypeInfo<T>::Store>(); }
+
+ char get_signature() const { return sig; }