All Projects → mpark → Variant

mpark / Variant

Licence: bsl-1.0
C++17 `std::variant` for C++11/14/17

Programming Languages

cpp
1120 projects
cpp11
221 projects
cpp17
186 projects
cpp14
131 projects

Projects that are alternatives of or similar to Variant

Jsonsubtypes
Discriminated Json Subtypes Converter implementation for .NET
Stars: ✭ 201 (-58.47%)
Mutual labels:  polymorphism
ftor
ftor enables ML-like type-directed, functional programming with Javascript including reasonable debugging.
Stars: ✭ 44 (-90.91%)
Mutual labels:  polymorphism
Whitecomet-Research
Research on malware creation and protection
Stars: ✭ 62 (-87.19%)
Mutual labels:  polymorphism
typeclass-interface-pattern
Ideas, thoughts, and notes on a typeclass/interface based polymorphism pattern for standard C
Stars: ✭ 26 (-94.63%)
Mutual labels:  polymorphism
GeneticVariation.jl
Datastructures and algorithms for working with genetic variation
Stars: ✭ 33 (-93.18%)
Mutual labels:  polymorphism
vanilla-lang
An implementation of a predicative polymorphic language with bidirectional type inference and algebraic data types
Stars: ✭ 73 (-84.92%)
Mutual labels:  polymorphism
You Don T Know Oop
Знаете ли вы ооп?
Stars: ✭ 170 (-64.88%)
Mutual labels:  polymorphism
Scriptum
A fool's scriptum on functional programming
Stars: ✭ 346 (-28.51%)
Mutual labels:  polymorphism
system-F
Formalization of the polymorphic lambda calculus and its parametricity theorem
Stars: ✭ 20 (-95.87%)
Mutual labels:  polymorphism
archsat
A proof-producing SMT/McSat solver, handling polymorphic first-order logic, and using an SMT/McSat core extended using Tableaux, Superposition and Rewriting.
Stars: ✭ 20 (-95.87%)
Mutual labels:  polymorphism
Unity-SerializeReferenceExtensions
Provide popup to specify the type of the field serialized by the [SerializeReference] attribute in the inspector.
Stars: ✭ 255 (-47.31%)
Mutual labels:  polymorphism
Java-Programs
Java Practiced Problems including concepts of OOPS, Interface, String , Collection.
Stars: ✭ 51 (-89.46%)
Mutual labels:  polymorphism
Battleship
An Object-Oriented VBA experiment
Stars: ✭ 66 (-86.36%)
Mutual labels:  polymorphism
React Polymorphic Box
Building blocks for strongly typed polymorphic components in React.
Stars: ✭ 206 (-57.44%)
Mutual labels:  polymorphism
OOP-In-CPlusPlus
An Awesome Repository On Object Oriented Programming In C++ Language. Ideal For Computer Science Undergraduates, This Repository Holds All The Resources Created And Used By Me - Code & Theory For One To Master Object Oriented Programming. Filled With Theory Slides, Number Of Programs, Concept-Clearing Projects And Beautifully Explained, Well Doc…
Stars: ✭ 27 (-94.42%)
Mutual labels:  polymorphism
Te
TE: C++17 Run-time polymorphism (type erasure) library
Stars: ✭ 186 (-61.57%)
Mutual labels:  polymorphism
swagger-object-validator
Node-Module to validate your model against a swagger spec and receive in-depth error traces
Stars: ✭ 27 (-94.42%)
Mutual labels:  polymorphism
Arrow
Λrrow - Functional companion to Kotlin's Standard Library
Stars: ✭ 4,771 (+885.74%)
Mutual labels:  polymorphism
nest-angular
Full-stack with nest js & angular 8
Stars: ✭ 32 (-93.39%)
Mutual labels:  polymorphism
subml
SubML (prototype) language
Stars: ✭ 21 (-95.66%)
Mutual labels:  polymorphism

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].