Skip to content

mpark/variant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

23cb94f · Aug 17, 2021
Dec 8, 2018
May 24, 2017
Aug 17, 2021
Jan 15, 2019
Jan 7, 2020
Jan 14, 2019
Dec 26, 2016
Dec 9, 2018
Dec 8, 2018
Jan 6, 2020
Mar 21, 2019
Aug 11, 2017
Jan 6, 2020

Repository files navigation

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.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-1ubuntu116.04ppa1) 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/RELEASE_362/final) (based on LLVM 3.6.2)
Clang 3.7.1 Ubuntu 16.04.6 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.6 LTS clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
Clang 3.9.1 Ubuntu 16.04.6 LTS clang version 3.9.1-4ubuntu3~16.04.2 (tags/RELEASE_391/rc2)
Clang 4.0.0 Ubuntu 16.04.6 LTS clang version 4.0.0-1ubuntu1~16.04.2 (tags/RELEASE_400/rc1)
Clang 5.0.0 Ubuntu 16.04.6 LTS clang version 5.0.0-3~16.04.1 (tags/RELEASE_500/final)
Clang 6.0.0 Ubuntu 16.04.6 LTS clang version 6.0.0-1ubuntu2~16.04.1 (tags/RELEASE_600/final)
Clang 7.1.0 Ubuntu 16.04.6 LTS clang version 7.1.0-svn353565-1exp120190408084827.60 (branches/release_70)
Clang 8.0.1 Ubuntu 16.04.6 LTS clang version 8.0.1-svn369350-1exp120190820122438.78 (branches/release_80)
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.