value& value::operator=(double val) { if(!tag_) set(tag_double(val)); else switch(tag_->get_type()) { case tag_type::Double: static_cast<tag_double&>(*tag_).set(val); break; default: throw std::bad_cast(); } return *this; }
value_initializer::value_initializer(double val) : value(tag_double(val)) {}
tag_value& tag_value::operator=(double x) { *this = tag_double(x); return *this; }