Intrinsic currying for C++ template metaprograms

Paul Keir, Andrew Gozillon, Seyed H. Haeri (Hossein)

Research output: Chapter in Book/Report/Conference proceedingConference contributionpeer-review

325 Downloads (Pure)


C++ template metaprogramming is a form of strict functional programming, with a notable absence of intrinsic support for elementary higher-order operations. We describe a variadic template metaprogramming library which offers a model of implicitly curried, left-associative metafunction application through juxtaposition; inspired by languages such as Haskell, OCaml and F#. New and existing traits and metafunctions, constructed according to conventional idioms, seemlessly take advantage of the framework's features. Furthermore, a distinctive versatility is exposed, allowing a user to define higher-order metafunction classes using an equational definition syntax; without recourse to elaborate nested metafunctions. The primary type expression evaluator of the library is derived from a single application of an elementary folding combinator for type lists. The definition of the fold's binary operator argument is therefore a focal point; and constructed mindful that substitution failure of a template parameter's deduced type produces no compilation error. Two distinctive features of C++ metafunctions require particular consideration: zero argument metafunctions; and variadic metafunctions. We conclude by demonstrating characteristics of the library's main evaluation metafunction in conjunction with the universal property of an updated right-fold combinator, to compose a range of metafunctions including map, reverse, left-fold, and the Ackermann function.
Original languageEnglish
Title of host publicationTrends in Functional Programming
Subtitle of host publication19th International Symposium, TFP 2018 Gothenburg, Sweden, June 11–13, 2018 Revised , Sweden, June 11-13, Selected Papers
PublisherSpringer International Publishing AG
Number of pages28
ISBN (Electronic)9783030185060
ISBN (Print)9783030185053
Publication statusPublished - 24 Apr 2019

Publication series

NameLecture Notes in Computer Science
PublisherSpringer International Publishing
ISSN (Print)0302-9743
ISSN (Electronic)1611-3349


  • Currying
  • Metaprogramming
  • Templates
  • Types


Dive into the research topics of 'Intrinsic currying for C++ template metaprograms'. Together they form a unique fingerprint.

Cite this