| .. | ||
| scripts | ||
| test | ||
| .gitignore | ||
| .travis.yml | ||
| appveyor.yml | ||
| common.gypi | ||
| Jamroot | ||
| LICENSE | ||
| Makefile | ||
| optional.hpp | ||
| README.md | ||
| recursive_wrapper.hpp | ||
| variant.gyp | ||
| variant.hpp | ||
| vcbuild.bat | ||
Mapbox Variant
An alternative to boost::variant for C++11.
Why use Mapbox Variant?
Mapbox variant has the same speedy performance of boost::variant but is faster to compile, results in smaller binaries, and has no dependencies.
For example on OS X 10.9 with clang++ and libc++:
| Test | Mapbox Variant | Boost Variant |
|---|---|---|
| Size of pre-compiled header (release / debug) | 2.8/2.8 MB | 12/15 MB |
| Size of simple program linking variant (release / debug) | 8/24 K | 12/40 K |
| Time to compile header | 185 ms | 675 ms |
Depends
- Compiler supporting
-std=c++11
Tested with
- g++-4.7
- g++-4.8
- clang++-3.4
- clang++-3.5
- Visual C++ Compiler November 2013 CTP
- Visual C++ Compiler 2014 CTP 4
Note: get the "2013 Nov CTP" release at http://www.microsoft.com/en-us/download/details.aspx?id=41151 and the 2014 CTP at http://www.visualstudio.com/en-us/downloads/visual-studio-14-ctp-vs.aspx
Usage
There is nothing to build, just include variant.hpp and recursive_wrapper.hpp in your project.
Tests
The tests depend on:
- Boost headers (for benchmarking against
boost::variant) - Boost built with
--with-timer(used for benchmark timing)
On Unix systems set your boost includes and libs locations and run make test:
export LDFLAGS='-L/opt/boost/lib'
export CXXFLAGS='-I/opt/boost/include'
make test
On windows do:
vcbuild
Benchmark
On Unix systems run the benchmark like:
make bench
Check object sizes
make sizes /path/to/boost/variant.hpp