» ConstList
…is a experimental compile-time functional-style list library written in C++.
The MIT licensed implementation may be found on Github or cgit.
It was written as a experiment in how far one could take the optional compile-time executability offered by constexpr
specifically and the C++ template metaprogramming facilities in general. While basic Cons structures and appropriate accessor functions turned out to be quite straight forward to implement, the current problem is the absence of workable arbitrary value comparison in a templated context if one doesn’t want to be limited to values that can be used as template parameters such as integers. This means that it is currently impossible to e.g. filter a list using foldr
.
Note that these restrictions were overcome in my second attempt at this problem which follows the concept of viewing types as values and templates as functions.
Current features
Cons
class template for representing constant list structures at compile timemake
method template for easily constructingCons
structures- list constructors such as
make
andconcatenate
- basic list accessors such as
size
,head
,tail
,nth
andtake
- higher order list operators such as
foldr
,foldl
andmap
- higher order list queries such as
any
,all
,none
andcount
- special purpose methods such as
reverse
- test cases for all of the above
- MIT license
Usage example
const int sum{ ConstList::foldr( ConstList::make(1, 2, 3, 4, 5), [](const int& x, const int& y) { return x + y; }, 0 ) }; // => 15