Editorial cleanup before applying Daniel's technical suggestions.
Change the any default constructor to noexcept. (Daniel Krügler)
Change any& operator=(any rhs) to any& operator=(const any& rhs), and change the effects accordingly. (Daniel Krügler) This avoids an ambiguity with the default generated any& operator=(const any& rhs) caused by the move assignment operator. Test case:
    any a;
    a = any{};
Add rhs.empty() postcondition to any& operator=(any&& rhs) noexcept. (Daniel Krügler)