Using Concepts in C++

How do I use concepts in C++ to check if a type is a range?

Concepts in C++20 allow us to define requirements that types must satisfy. To determine if an object is a valid range using C++20 concepts, there are two steps:

  1. Include <ranges> Header: Standard library concepts for testing ranges are in the std::ranges namespace.
  2. Check Range Type: Use concepts like std::ranges::forward_range to determine the category.

Here's an example:

#include <vector>
#include <list>
#include <forward_list>
#include <ranges>
#include <iostream>

template <typename T>
void Log(T Range) {
  if constexpr (std::ranges::forward_range<T>) {
    std::cout << " - Forward Range\n";
  }
  if constexpr (std::ranges::bidirectional_range<T>) {
    std::cout << " - Bidirectional Range\n";
  }
  if constexpr (std::ranges::random_access_range<T>) {
    std::cout << " - Random Access Range\n";
  }
}

int main() {
  std::cout << "std::forward_list<int>:\n";
  Log(std::forward_list<int>{1, 2, 3});

  std::cout << "\nstd::list<int>:\n";
  Log(std::list<int>{1, 2, 3});

  std::cout << "\nstd::vector<int>:\n";
  Log(std::vector<int>{1, 2, 3});
}
std::forward_list<int>:
 - Forward Range

std::list<int>:
 - Forward Range
 - Bidirectional Range

std::vector<int>:
 - Forward Range
 - Bidirectional Range
 - Random Access Range

Concepts simplify template programming by providing clear requirements for types.

Iterators and Ranges

This lesson offers an in-depth look at iterators and ranges, emphasizing their roles in container traversal

Questions & Answers

Answers are generated by AI models and may not have been reviewed. Be mindful when running any code on your device.

How to Use Iterators in C++
How do I use iterators with different containers in C++?
What is a Range in C++?
What is a range in C++ and how is it different from an iterator?
Using Range-Based For Loops in C++
How do I use range-based for loops in C++?
Passing by Reference in Range-Based For Loops
Why should I pass by reference in range-based for loops in C++?
Understanding Range Categories in C++
What are the different categories of ranges in C++?
Or Ask your Own Question
Get an immediate answer to your specific question using our AI assistant