-template<> struct TypeResolver<short> { static const Value::Type type=Value::INTEGER; };
-template<> struct TypeResolver<unsigned short> { static const Value::Type type=Value::INTEGER; };
-template<> struct TypeResolver<int> { static const Value::Type type=Value::INTEGER; };
-template<> struct TypeResolver<unsigned> { static const Value::Type type=Value::INTEGER; };
-template<> struct TypeResolver<long> { static const Value::Type type=Value::INTEGER; };
-template<> struct TypeResolver<unsigned long> { static const Value::Type type=Value::INTEGER; };
-template<> struct TypeResolver<float> { static const Value::Type type=Value::FLOAT; };
-template<> struct TypeResolver<double> { static const Value::Type type=Value::FLOAT; };
-template<> struct TypeResolver<bool> { static const Value::Type type=Value::BOOLEAN; };
+ Value(const Symbol &d): sig(TypeInfo<Symbol>::signature), data(d) { }
+ Value(Symbol &&d): sig(TypeInfo<Symbol>::signature), data(std::move(d)) { }