Creating Custom Concepts

Using concepts to constrain auto parameters

Can I use concepts to constrain auto parameters in functions? How does it work?

Abstract art representing computer hardware

Yes, in C++20, you can use concepts to constrain auto parameters in functions. This allows you to specify requirements on the deduced type of an auto parameter, ensuring that only arguments satisfying the concept are accepted.

Here's an example that demonstrates using concepts to constrain auto parameters:

#include <concepts>
#include <iostream>

template <typename T>
concept Addable = requires(T a, T b) {
  a + b;
};

void add(Addable auto a, Addable auto b) {
  std::cout << "Result: " << a + b << '\n';
}

int main() {
  add(1, 2);
  add(3.14, 2.71);
  add(std::string{"Hello"},
    std::string{" world"});
}

In this example, the Addable concept is defined to check if a type T supports the + operator. The requires expression inside the concept ensures that the expression a + b is valid for instances a and b of type T.

The add function uses auto parameters constrained by the Addable concept. The Addable auto syntax specifies that the deduced type of the auto parameter must satisfy the Addable concept.

In the main function, we call the add function with different types of arguments. The compiler will deduce the type of each auto parameter and check if it satisfies the Addable concept before instantiating the function.

The output of this program will be:

Result: 3
Result: 5.85
Result: Hello world

By using concepts to constrain auto parameters, you can write more generic and reusable code while still enforcing specific requirements on the deduced types. The concept constraint ensures that only arguments satisfying the concept are accepted, providing type safety and clarity to the function interface.

Note that you can also use concepts to constrain auto return types and auto variables in a similar way. This allows you to express requirements on the deduced types and catch potential type mismatches at compile-time.

Constraining auto parameters with concepts is a powerful feature in C++20 that combines the flexibility of auto type deduction with the type safety and expressiveness of concepts.

This Question is from the Lesson:

Creating Custom Concepts

Learn how to create your own C++20 concepts to define precise requirements for types, using boolean expressions and requires statements.

Answers to questions are automatically generated and may not have been reviewed.

This Question is from the Lesson:

Creating Custom Concepts

Learn how to create your own C++20 concepts to define precise requirements for types, using boolean expressions and requires statements.

A computer programmer
Part of the course:

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Free, unlimited access

This course includes:

  • 124 Lessons
  • 550+ Code Samples
  • 96% Positive Reviews
  • Regularly Updated
  • Help and FAQ
Free, Unlimited Access

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Screenshot from Warhammer: Total War
Screenshot from Tomb Raider
Screenshot from Jedi: Fallen Order
Contact|Privacy Policy|Terms of Use
Copyright © 2024 - All Rights Reserved