How to make ad-hoc polymorphism less ad hoc
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
AXIOM: the scientific computation system
AXIOM: the scientific computation system
Implementing Haskell overloading
FPCA '93 Proceedings of the conference on Functional programming languages and computer architecture
The design and evolution of C++
The design and evolution of C++
Qualified types: theory and practice
Qualified types: theory and practice
ACM Transactions on Programming Languages and Systems (TOPLAS)
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The C++ Programming Language
Parametric Overloading in Polymorphic Programming Languages
ESOP '88 Proceedings of the 2nd European Symposium on Programming
Towards a theory of type structure
Programming Symposium, Proceedings Colloque sur la Programmation
A comparative study of language support for generic programming
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Consolidated ada reference manual: language and standard libraries
Consolidated ada reference manual: language and standard libraries
Supporting SELL for high-performance computing
LCPC'05 Proceedings of the 18th international conference on Languages and Compilers for Parallel Computing
Algorithm specialization in generic programming: challenges of constrained generics in C++
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
Scrap++: scrap your boilerplate in C++
Proceedings of the 2006 ACM SIGPLAN workshop on Generic programming
Concepts: linguistic support for generic programming in C++
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Debugging C++ template metaprograms
Proceedings of the 5th international conference on Generative programming and component engineering
Evolving a language in and for the real world: C++ 1991-2006
Proceedings of the third ACM SIGPLAN conference on History of programming languages
Searching for type-error messages
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
A comparison of c++ concepts and haskell type classes
Proceedings of the ACM SIGPLAN workshop on Generic programming
Static and metaprogramming patterns and static frameworks: a catalog. an application
Proceedings of the 2006 conference on Pattern languages of programs
JAxT and JDI: the simplicity of junit applied to axioms and data invariants
Companion to the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
C++ concepts as institutions: a specification view on concepts
LCSD '07 Proceedings of the 2007 Symposium on Library-Centric Software Design
EClean - An Embedded Functional Language
Electronic Notes in Theoretical Computer Science (ENTCS)
Domain-specific language integration with compile-time parser generator library
GPCE '10 Proceedings of the ninth international conference on Generative programming and component engineering
Type classes as objects and implicits
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Generic programming with c++ concepts and haskell type classes: A comparison
Journal of Functional Programming
Experiences in developing the mCRL2 toolset
Software—Practice & Experience
Support for the evolution of C++ generic functions
SLE'10 Proceedings of the Third international conference on Software language engineering
JavaGI: The Interaction of Type Classes with Interfaces and Inheritance
ACM Transactions on Programming Languages and Systems (TOPLAS)
An automatic parallelization framework for algebraic computation systems
Proceedings of the 36th international symposium on Symbolic and algebraic computation
ConceptClang: an implementation of C++ concepts in Clang
Proceedings of the seventh ACM SIGPLAN workshop on Generic programming
Supporting SELL for high-performance computing
LCPC'05 Proceedings of the 18th international conference on Languages and Compilers for Parallel Computing
A semantic analysis of c++ templates
ECOOP'06 Proceedings of the 20th European conference on Object-Oriented Programming
The implicit calculus: a new foundation for generic programming
Proceedings of the 33rd ACM SIGPLAN conference on Programming Language Design and Implementation
ESOP'12 Proceedings of the 21st European conference on Programming Languages and Systems
Design of concept libraries for c++
SLE'11 Proceedings of the 4th international conference on Software Language Engineering
Modular mathematical modelling of biological systems
Proceedings of the 2012 Symposium on Theory of Modeling and Simulation - DEVS Integrative M&S Symposium
A system for axiomatic programming
CICM'12 Proceedings of the 11th international conference on Intelligent Computer Mathematics
SSGIP'10 Proceedings of the 2010 international spring school conference on Generic and Indexed Programming
Genericity for model management operations
Software and Systems Modeling (SoSyM)
Interfacing mathemagix with C++
Proceedings of the 38th international symposium on International symposium on symbolic and algebraic computation
Abstraction in physiological modelling languages
Proceedings of the Symposium on Theory of Modeling & Simulation - DEVS Integrative M&S Symposium
Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
Extending Type Inference to Variational Programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
Early detection of type errors in C++ templates
Proceedings of the ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation
Template metaprogramming techniques for concept-based specialization
Scientific Programming
Hi-index | 0.00 |
C++ templates are key to the design of current successful mainstream libraries and systems. They are the basis of programming techniques in diverse areas ranging from conventional general-purpose programming to software for safety-critical embedded systems. Current work on improving templates focuses on the notion of concepts (a type system for templates), which promises significantly improved error diagnostics and increased expressive power such as concept-based overloading and function template partial specialization. This paper presents C++ templates with an emphasis on problems related to separate compilation. We consider the problem of how to express concepts in a precise way that is simple enough to be usable by ordinary programmers. In doing so, we expose a few weakness of the current specification of the C++ standard library and suggest a far more precise and complete specification. We also present a systematic way of translating our proposed concept definitions, based on use-patterns rather than function signatures, into constraint sets that can serve as convenient basis for concept checking in a compiler.