C++17 `std::variant` for C++11/14/17
Branch: master
Clone or download
Latest commit f8aa7c1 Jan 24, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
3rdparty Updated googletest submodule and pointed it to abseil. Dec 8, 2018
cmake Rename `LICENSE_1_0.txt` to `LICENSE.md`. May 24, 2017
include/mpark
support
test Updated the Godbolt and Wandbox links on READMEs. Jan 15, 2019
.appveyor.yml
.clang-format
.gitignore Ignored Google Benchmark submodule in `3rdparty/benchmark`. Dec 9, 2018
.gitmodules Updated googletest submodule and pointed it to abseil. Dec 8, 2018
.travis.yml Removed OS X: Xcode 7.3. Jan 29, 2019
CMakeLists.txt Bumped version to 1.3.0. Dec 12, 2017
LICENSE.md Move metabench license to the benchmark branch. Aug 11, 2017
README.md Removed OS X: Xcode 7.3. Jan 29, 2019

README.md

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 16.04.5 LTS g++-4.8 (Ubuntu 4.8.5-4ubuntu8~16.04.1) 4.8.5
GCC 4.9.4 Ubuntu 16.04.5 LTS g++-4.9 (Ubuntu 4.9.4-2ubuntu1~16.04) 4.9.4
GCC 5.5.0 Ubuntu 16.04.5 LTS g++-5 (Ubuntu 5.5.0-12ubuntu1~16.04) 5.5.0 20171010
GCC 6.5.0 Ubuntu 16.04.5 LTS g++-6 (Ubuntu 6.5.0-2ubuntu1~16.04) 6.5.0 20181026
GCC 7.4.0 Ubuntu 16.04.5 LTS g++-7 (Ubuntu 7.4.0-1ubuntu1~16.04~ppa1) 7.4.0
GCC 8.1.0 Ubuntu 16.04.5 LTS g++-8 (Ubuntu 8.1.0-5ubuntu1~16.04) 8.1.0
Clang 3.6.2 Ubuntu 16.04.5 LTS Ubuntu clang version 3.6.2-3ubuntu2 (tags/RELEASE_362/final) (based on LLVM 3.6.2)
Clang 3.7.1 Ubuntu 16.04.5 LTS Ubuntu clang version 3.7.1-2ubuntu2 (tags/RELEASE_371/final) (based on LLVM 3.7.1)
Clang 3.8.0 Ubuntu 16.04.5 LTS clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
Clang 3.9.1 Ubuntu 16.04.5 LTS clang version 3.9.1-4ubuntu3~16.04.2 (tags/RELEASE_391/rc2)
Clang 4.0.0 Ubuntu 16.04.5 LTS clang version 4.0.0-1ubuntu1~16.04.2 (tags/RELEASE_400/rc1)
Clang 5.0.0 Ubuntu 16.04.5 LTS clang version 5.0.0-3~16.04.1 (tags/RELEASE_500/final)
Clang 6.0.0 Ubuntu 16.04.5 LTS clang version 6.0.0-1ubuntu2~16.04.1 (tags/RELEASE_600/final)
Clang 7.0.1 Ubuntu 16.04.5 LTS clang version 7.0.1-svn347285-1~exp1~20181124105320.40 (branches/release_70)
Clang Xcode 8.3 Darwin Kernel Version 16.7.0 (OS X 10.12.6) Apple LLVM version 8.1.0 (clang-802.0.42)
Clang Xcode 9.4 Darwin Kernel Version 17.4.0 (OS X 10.13.3) Apple LLVM version 9.1.0 (clang-902.0.39.2)
Clang Xcode 10.1 Darwin Kernel Version 17.7.0 (OS X 10.13.6) Apple LLVM version 10.0.0 (clang-1000.11.45.5)
Visual Studio 14 2015 Visual Studio 2015 with Update 3 MSVC 19.0.24241.7
Visual Studio 15 2017 Visual Studio 2017 with Update 8 MSVC 19.15.26732.1
Visual Studio 15 2017 Visual Studio 2017 with Update 9 MSVC 19.16.27025.1
Visual Studio 15 2017 (Clang/LLVM) Visual Studio 2017 Clang 7.0.0

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.