C++17
std::variant
für C++11 / 14 / 17
MPark.Variant ist eine Implementierung von C++17 std::variant
für C++11 / 14 / 17 .
std::variant
für libc++std::variant
Testsuite von libc++ getestet. Der Single-Header-Zweig stellt für jede Version eine eigenständige variant.hpp
Datei bereit. Kopieren Sie es und #include
weg!
Sie können mpark/variant
als Submodul zu Ihrem Projekt hinzufügen.
git submodule add https://github.com/mpark/variant.git 3rdparty/variant
Fügen Sie das include
Verzeichnis mit -I3rdparty/variant/include
zu Ihrem Include-Pfad hinzu und #include
dann den Header variant.hpp
mit #include <mpark/variant.hpp>
ein.
Wenn Sie CMake verwenden, können Sie einfach add_subdirectory(3rdparty/variant)
verwenden:
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)
find_package
git clone https://github.com/mpark/variant.git
mkdir variant/build && cd variant/build
cmake ..
cmake --build . --target install
Dadurch wird mpark/variant
im Standardinstallationsverzeichnis für Ihre Plattform installiert ( /usr/local
für Unix, C:Program Files
für Windows). Sie können die Installation auch an einem benutzerdefinierten Ort über die Variable CMAKE_INSTALL_PREFIX
durchführen (z. B. cmake .. -DCMAKE_INSTALL_PREFIX=/opt
).
Der installierte mpark/variant
kann dann von CMake über find_package
gefunden werden:
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 sucht in seinem Standardsatz von Installationspräfixen nach mpark/variant
. Wenn mpark/variant
über die Variable CMAKE_INSTALL_PREFIX
an einem benutzerdefinierten Speicherort installiert wird, müssen Sie wahrscheinlich CMAKE_PREFIX_PATH
verwenden, um den Speicherort anzugeben (z. B. cmake .. -DCMAKE_PREFIX_PATH=/opt
).
Diese Bibliothek erfordert einen standardkonformen C++11 -Compiler. Folgende Compiler werden kontinuierlich getestet:
Compiler | Betriebssystem | Versionszeichenfolge |
---|---|---|
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 |
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 |
Klirren 3.6.2 | Ubuntu 16.04.6 LTS | Ubuntu Clang Version 3.6.2-3ubuntu2 (tags/RELEASE_362/final) (basierend auf LLVM 3.6.2) |
Klirren 3.7.1 | Ubuntu 16.04.6 LTS | Ubuntu Clang Version 3.7.1-2ubuntu2 (tags/RELEASE_371/final) (basierend auf LLVM 3.7.1) |
Clang 3.8.0 | Ubuntu 16.04.6 LTS | Clang-Version 3.8.0-2ubuntu4 (tags/RELEASE_380/final) |
Klirren 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) |
Klirren 7.1.0 | Ubuntu 16.04.6 LTS | Clang-Version 7.1.0-svn353565-1 |
Klirren 8.0.1 | Ubuntu 16.04.6 LTS | Clang-Version 8.0.1-svn369350-1 |
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 mit Update 3 | MSVC 19.0.24241.7 |
Visual Studio 15 2017 | Visual Studio 2017 mit Update 8 | MSVC 19.15.26732.1 |
Visual Studio 15 2017 | Visual Studio 2017 mit Update 9 | MSVC 19.16.27025.1 |
Visual Studio 15 2017 ( Clang/LLVM ) | Visual Studio 2017 | Clang 7.0.0 |
constexpr
Unterstützung ist für visit
und relationale Operatoren nicht verfügbar.std::variant
Tests ist die Unterstützung -std=c++17
erforderlich. MPARK_VARIANT_INCLUDE_TESTS
: STRING
( Standard : ""
)
Durch Semikolons getrennte Liste der zu erstellenden Tests. Mögliche Werte sind mpark
und libc++
.
HINWEIS : Die libc++ std::variant
Tests werden mit -std=c++17
erstellt.
Siehe test/README.md.
Verteilt unter der Boost-Softwarelizenz, Version 1.0.