🎯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 addabletemplate<typename T>concept Addable = requires(T a, T b) { { a + b } -> std::convertible_to<T>;};// Use the concept to constrain a templatetemplate<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