| Home | Libraries | People | FAQ | More

## Reference

### ValueType requirements

Values are strongly informational objects for which identity is not significant, i.e. the focus is principally on their state content and any behavior organized around that. Another distinguishing feature of values is their granularity: normally fine-grained objects representing simple concepts in the system such as quantities.

As the emphasis of a value lies in its state not its identity, values can be copied and typically assigned one to another, requiring the explicit or implicit definition of a public copy constructor and public assignment operator. Values typically live within other scopes, i.e. within objects or blocks, rather than on the heap. Values are therefore normally passed around and manipulated directly as variables or through references, but not as pointers that emphasize identity and indirection.

The specific requirements on value types to be used in an `any` are:

- A ValueType is CopyConstructible [20.1.3].
- A ValueType is optionally Assignable [23.1]. The strong exception-safety guarantee is required for all forms of assignment.
- The destructor for a ValueType upholds the no-throw exception-safety guarantee.

### Header <boost/any.hpp>

    namespace boost {
      class bad_any_cast;
      class any;
      template<typename T> T any_cast(any &);
      template<typename T> T any_cast(const any &);
      template<typename ValueType> const ValueType * any_cast(const any *);
      template<typename ValueType> ValueType * any_cast(any *);
    }