31namespace typehandling {
40 : _value(other._value ? other._value->cloneStorable() :
nullptr) {}
45 _value = other._value->cloneStorable();
53 swap(_value, other._value);
59 swap(_value, other._value);
64PolymorphicValue::operator
Storable&() {
return get(); }
65PolymorphicValue::operator
Storable const&()
const {
return get(); }
79 if (!empty() && !other.empty()) {
80 return get().equals(other.get());
83 return _value == other._value;
#define LSST_EXCEPT(type,...)
Container that passes Storable objects by value while preserving type.
void swap(PolymorphicValue &other) noexcept
Exchange the contents of this container and another.
~PolymorphicValue() noexcept
bool operator==(PolymorphicValue const &other) const noexcept
Test whether the contained Storables are equal.
Storable & get()
Return a reference to the internal Storable, if one exists.
PolymorphicValue & operator=(PolymorphicValue const &other)
Try to assign a PolymorphicValue.
bool empty() const noexcept
Check whether this object contains a Storable.
PolymorphicValue(Storable const &value)
Create a new object containing a copy of a Storable.
std::size_t hash_value() const
Return a hash of this object (optional operation).
Interface supporting iteration over heterogenous containers.
void swap(PolymorphicValue &lhs, PolymorphicValue &rhs) noexcept
Swap specialization for PolymorphicValue.