/variant

C++17 `std::variant` for C++11/14/17

Primary LanguageC++Boost Software License 1.0BSL-1.0

MPark.Variant

C++17 std::variant for C++11/14/17

release header travis appveyor license godbolt wandbox

Introduction

MPark.Variant is an implementation of C++17 std::variant for C++11/14/17.

Documentation

Integration

Single Header

The single-header branch provides a standalone variant.hpp file for each release. Copy it and #include away!

Submodule

You can add mpark/variant as a submodule to your project.

git submodule add https://github.com/mpark/variant.git 3rdparty/variant

Add the include directory to your include path with -I3rdparty/variant/include then #include the variant.hpp header with #include <mpark/variant.hpp>.

If you use CMake, you can simply use add_subdirectory(3rdparty/variant):

cmake_minimum_required(VERSION 3.6.3)

project(HelloWorld CXX)

add_subdirectory(3rdparty/variant)

add_executable(hello-world hello_world.cpp)
target_link_libraries(hello-world mpark_variant)

Installation / CMake find_package

git clone https://github.com/mpark/variant.git
mkdir variant/build && cd variant/build
cmake ..
cmake --build . --target install

This will install mpark/variant to the default install-directory for your platform (/usr/local for Unix, C:\Program Files for Windows). You can also install at a custom location via the CMAKE_INSTALL_PREFIX variable, (e.g., cmake .. -DCMAKE_INSTALL_PREFIX=/opt).

The installed mpark/variant can then be found by CMake via find_package:

cmake_minimum_required(VERSION 3.6.3)

project(HelloWorld CXX)

find_package(mpark_variant 1.3.0 REQUIRED)

add_executable(hello-world hello_world.cpp)
target_link_libraries(hello-world mpark_variant)

CMake will search for mpark/variant in its default set of installation prefixes. If mpark/variant is installed in a custom location via the CMAKE_INSTALL_PREFIX variable, you'll likely need to use the CMAKE_PREFIX_PATH to specify the location (e.g., cmake .. -DCMAKE_PREFIX_PATH=/opt).

Requirements

This library requires a standard conformant C++11 compiler. The following compilers are continously tested:

Compiler Operating System Version String
GCC 4.8.5 Ubuntu 14.04.5 LTS g++-4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5
GCC 4.9.4 Ubuntu 14.04.5 LTS g++-4.9 (Ubuntu 4.9.4-2ubuntu1~14.04.1) 4.9.4
GCC 5.4.1 Ubuntu 14.04.5 LTS g++-5 (Ubuntu 5.4.1-2ubuntu1~14.04) 5.4.1 20160904
GCC 6.3.0 Ubuntu 14.04.5 LTS g++-6 (Ubuntu/Linaro 6.3.0-18ubuntu2~14.04) 6.3.0 20170519
GCC 7.2.0 Ubuntu 14.04.5 LTS g++-7 (Ubuntu 7.2.0-1ubuntu1~14.04) 7.2.0
Clang 3.6.2 Ubuntu 14.04.5 LTS Ubuntu clang version 3.6.2-svn240577-1~exp1 (branches/release_36) (based on LLVM 3.6.2)
Clang 3.7.1 Ubuntu 14.04.5 LTS Ubuntu clang version 3.7.1-svn253571-1~exp1 (branches/release_37) (based on LLVM 3.7.1)
Clang 3.8.0 Ubuntu 14.04.5 LTS clang version 3.8.0-2ubuntu3~trusty5 (tags/RELEASE_380/final)
Clang 3.9.1 Ubuntu 14.04.5 LTS clang version 3.9.1-4ubuntu3~14.04.2 (tags/RELEASE_391/rc2)
Clang 4.0.1 Ubuntu 14.04.5 LTS clang version 4.0.1-svn305264-1~exp1 (branches/release_40)
Clang 5.0.0 Ubuntu 14.04.5 LTS clang version 5.0.0-svn312333-1~exp1 (branches/release_50)
Clang Xcode 6.4 Darwin Kernel Version 14.5.0 (OS X 10.10.3) Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Clang Xcode 7.3 Darwin Kernel Version 15.6.0 (OS X 10.10.5) Apple LLVM version 7.3.0 (clang-703.0.31)
Clang Xcode 8.3 Darwin Kernel Version 16.6.0 (OS X 10.12.5) Apple LLVM version 8.1.0 (clang-802.0.42)
Visual Studio 14 2015 Visual Studio 2015 with Update 3 MSVC 19.0.24215.1 (Microsoft (R) Build Engine version 14.0.25420.1)
Visual Studio 15 2017 Visual Studio 2017 MSVC 19.11.25547.0 (Microsoft (R) Build Engine version 15.4.8.50001)
Visual Studio 14 2015 (Clang/LLVM) Visual Studio 2015 with Update 3 Clang 4.0.0 (Microsoft (R) Build Engine version 14.0.25420.1)

NOTES

  • GCC 4.8/4.9: constexpr support is not available for visit and relational operators.
  • Enabling libc++ std::variant tests require -std=c++17 support.

CMake Variables

  • MPARK_VARIANT_INCLUDE_TESTS:STRING (default: "")

    Semicolon-separated list of tests to build. Possible values are mpark, and libc++.

    NOTE: The libc++ std::variant tests are built with -std=c++17.

Unit Tests

Refer to test/README.md.

License

Distributed under the Boost Software License, Version 1.0.