C++17
std::variant
for C++11/14/17
MPark.Variant is an implementation of C++17 std::variant
for C++11/14/17.
- Based on my implementation of
std::variant
for libc++ - Continuously tested against libc++'s
std::variant
test suite.
The single-header branch provides a standalone variant.hpp
file for each release.
Copy it and #include
away!
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)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_subdirectory(3rdparty/variant)
add_executable(hello-world hello_world.cpp)
target_link_libraries(hello-world mpark_variant)
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)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
find_package(mpark_variant 1.2.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
).
This library requires a standard conformant C++11 compiler. The following compilers are continously tested:
Compiler | Operating System | Version String |
---|---|---|
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.5.0 | Ubuntu 12.04.5 LTS | Ubuntu clang version 3.5.0-svn217304-1~exp1 (branches/release_35) (based on LLVM 3.5.0) |
Clang 3.6.2 | Ubuntu 12.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 12.04.5 LTS | Ubuntu clang version 3.7.1-svn253571-1~exp1 (branches/release_37) (based on LLVM 3.7.1) |
Clang 3.8.1 | Ubuntu 12.04.5 LTS | clang version 3.8.1-svn271772-1~exp1 (branches/release_38) |
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 |
Visual Studio 15 2017 | Visual Studio 2017 | MSVC 19.11.25507.1 |
Visual Studio 14 2015 (Clang/LLVM) | Visual Studio 2015 with Update 3 | Clang 4.0.0 |
- GCC 4.9:
constexpr
support is not available forvisit
and relational operators. - Enabling libc++
std::variant
tests require-std=c++17
support.
-
MPARK_VARIANT_INCLUDE_TESTS
:STRING
(default:""
)Semicolon-separated list of tests to build. Possible values are
mpark
, andlibc++
.NOTE: The libc++
std::variant
tests are built with-std=c++17
.
Refer to test/README.md.
Distributed under the Boost Software License, Version 1.0.