mpark / variant

C++17 `std::variant` for C++11/14/17
https://mpark.github.io/variant
Boost Software License 1.0
659 stars 88 forks source link

Figure out a plan for namespaces and versioning #18

Closed mpark closed 6 years ago

mpark commented 7 years ago

If I were to define something like:

namespace mpark {

  namespace cpp17 {

    template <typename... Ts>
    class variant;

    template <typename F, typename... Vs>
    decltype(auto) visit(F&& f, Vs&&... vs);

  }  // namespace cpp17

  inline namespace v1 {

    template <typename... Ts>
    class variant;

    namespace unsafe {
      template <typename F, typename... Ts>
      decltype(auto) visit(F&& f, Vs&... vs);
    }  // namespace unsafe

    template <typename F, typename... Ts>
    decltype(auto) visit(F&& f, Vs&... vs);

  }  // namespace v1

}  // namespace mpark

I could provide a relaxed variant which provide useful non-standard extensions for mpark::variant, and still provide the standard version in mpark::cpp17::variant.

One can then define something like this to ensure that they don't use non-standard extensions, and make a smooth transition from mpark/variant to std::variant.

namespace cpp17 = mpark::cpp17;
// Use `cpp17::variant`