All Recipes
Home/Concepts/Defining a Basic Concept
🎯beginner

Defining a Basic Concept

Learn how to define and use concepts to constrain template parameters

Example Code

cpp
#include <concepts>
#include <iostream>
// Define a concept that requires a type to be addable
template<typename T>
concept Addable = requires(T a, T b) {
{ a + b } -> std::convertible_to<T>;
};
// Use the concept to constrain a template
template<Addable T>
T add(T a, T b) {
return a + b;
}
int main() {
std::cout << add(5, 3) << std::endl; // Works: int is Addable
std::cout << add(2.5, 1.5) << std::endl; // Works: double is Addable
// add("hello", "world"); // Error: const char* is not Addable
return 0;
}

Explanation

Concepts provide a way to specify requirements on template arguments. They replace SFINAE and enable expressions with cleaner, more readable code. The compiler provides better error messages when concept requirements are not met.

Key Points

  • 1Concepts use the 'concept' keyword
  • 2The 'requires' clause specifies type requirements
  • 3Constraints are checked at compile time
  • 4Better error messages than SFINAE