Need help with variant?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

mpark
462 Stars 64 Forks Boost Software License 1.0 448 Commits 7 Opened issues

Description

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

Services available

!
?

Need anything else?

Contributors list

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 
.

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.6 LTS | g++-4.8 (Ubuntu 4.8.5-4ubuntu8~16.04.1) 4.8.5 | | GCC 4.9.4 | Ubuntu 16.04.6 LTS | g++-4.9 (Ubuntu 4.9.4-2ubuntu1~16.04) 4.9.4 | | GCC 5.5.0 | Ubuntu 16.04.6 LTS | g++-5 (Ubuntu 5.5.0-12ubuntu1~16.04) 5.5.0 20171010 | | GCC 6.5.0 | Ubuntu 16.04.6 LTS | g++-6 (Ubuntu 6.5.0-2ubuntu1~16.04) 6.5.0 20181026 | | GCC 7.4.0 | Ubuntu 16.04.6 LTS | g++-7 (Ubuntu 7.4.0-1ubuntu1~16.04~ppa1) 7.4.0 | | GCC 8.3.0 | Ubuntu 16.04.6 LTS | g++-8 (Ubuntu 8.3.0-16ubuntu3~16.04) 8.3.0 | | GCC 9.2.1 | Ubuntu 16.04.6 LTS | g++-9 (Ubuntu 9.2.1-17ubuntu1~16.04) 9.2.1 20191102 | | Clang 3.6.2 | Ubuntu 16.04.6 LTS | Ubuntu clang version 3.6.2-3ubuntu2 (tags/RELEASE362/final) (based on LLVM 3.6.2) | | Clang 3.7.1 | Ubuntu 16.04.6 LTS | Ubuntu clang version 3.7.1-2ubuntu2 (tags/RELEASE371/final) (based on LLVM 3.7.1) | | Clang 3.8.0 | Ubuntu 16.04.6 LTS | clang version 3.8.0-2ubuntu4 (tags/RELEASE380/final) | | Clang 3.9.1 | Ubuntu 16.04.6 LTS | clang version 3.9.1-4ubuntu3~16.04.2 (tags/RELEASE391/rc2) | | Clang 4.0.0 | Ubuntu 16.04.6 LTS | clang version 4.0.0-1ubuntu1~16.04.2 (tags/RELEASE400/rc1) | | Clang 5.0.0 | Ubuntu 16.04.6 LTS | clang version 5.0.0-3~16.04.1 (tags/RELEASE500/final) | | Clang 6.0.0 | Ubuntu 16.04.6 LTS | clang version 6.0.0-1ubuntu2~16.04.1 (tags/RELEASE600/final) | | Clang 7.1.0 | Ubuntu 16.04.6 LTS | clang version 7.1.0-svn353565-1~exp1~20190408084827.60 (branches/release70) | | Clang 8.0.1 | Ubuntu 16.04.6 LTS | clang version 8.0.1-svn369350-1~exp1~20190820122438.78 (branches/release80) | | 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.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.