cplusplus2x.Examples/C++20/concepts/ex2/requires.cpp
Source: cplusplus2x.Examples/C++20/concepts/ex2/requires.cpp
#include <iostream>
#include <type_traits>
template <typename T>
concept is_signed_int = std::is_signed_v<T> && !std::is_floating_point_v<T>;
template <typename T>
requires(std::is_signed_v<T> && !std::is_floating_point_v<T>)
void count_back(T start) {
for (T i = start; i > 0; i--) {
std::cout << "index: " << i << "\n";
}
}
template <is_signed_int I>
void count_back(I start, I skip) {
for (I i = start; i > 0; i -= skip) {
std::cout << "index: " << i << "\n";
}
}
int main(int argc, char **argv) {
count_back(10);
count_back(20, 2);
// count_back(static_cast<unsigned int>(10)); ERR
return 0;
}