Intrinsic currying for C++ template metaprograms

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

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

    391 Downloads (Pure)

    Abstract

    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
    Pages46-73
    Number of pages28
    ISBN (Electronic)9783030185060
    ISBN (Print)9783030185053
    DOIs
    Publication statusPublished - 24 Apr 2019

    Publication series

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

    Keywords

    • Currying
    • Metaprogramming
    • Templates
    • Types

    Fingerprint

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

    Cite this