Listen to this Post
Before C++20, generic template parameters for containers often led to cryptic compilation errors if the passed argument didnβt meet requirements. With concepts and ranges, we can now define expected container properties, providing clearer error messages.
Key Concepts in C++ Ranges
The ranges library introduces several useful concepts:
– `std::ranges::range` β Requires just `begin()` and end().
– `std::ranges::sized_range` β Range with a `size()` method.
– std::ranges::input_range, `std::ranges::output_range` β Define iterator requirements.
Range Traits for Container Analysis
Extract container details using:
– `std::ranges::iterator_t
– `std::ranges::const_iterator_t
– `std::ranges::range_value_t
– `std::ranges::range_size_t
Example: Counting Matches in a Container
Hereβs how to use concepts to count matches:
include <iostream>
include <vector>
include <ranges>
template<std::ranges::input_range R, typename T>
size_t count_matches(const R& range, const T& value) {
return std::ranges::count(range, value);
}
int main() {
std::vector<int> nums = {1, 2, 3, 2, 4, 2, 5};
std::cout << "Count of 2: " << count_matches(nums, 2) << "\n";
return 0;
}
π Compiler Explorer Example: https://lnkd.in/eCj_cqBP
You Should Know: Practical C++ Range Operations
1. Filtering a Range
auto even_nums = nums | std::views::filter([](int x) { return x % 2 == 0; });
2. Transforming Elements
auto squared = nums | std::views::transform([](int x) { return x x; });
3. Combining Views
auto even_squares = nums | std::views::filter([](int x) { return x % 2 == 0; })
| std::views::transform([](int x) { return x x; });
Linux & Windows Commands for Developers
- Linux (GDB Debugging)
g++ -std=c++20 -g program.cpp -o program gdb ./program
- Windows (CL Compilation)
cl /EHsc /std:c++20 program.cpp
What Undercode Say
C++20βs concepts and ranges significantly improve template readability and error handling. By enforcing constraints, developers avoid cryptic template errors. Practical applications include filtering, transforming, and efficiently processing container data.
Expected Output:
Count of 2: 3
References:
Reported By: Nikolai Kutiavin – Hackers Feeds
Extra Hub: Undercode MoN
Basic Verification: Pass β



