1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
#include <iostream>
#include <vector>
template <typename Type>
concept Addable =
requires(Type lh, Type rh)
{
lh + rh;
};
//generic
template <typename Tp>
struct Handler
{
Handler()
{
std::cout << "Generic Handler\n";
}
};
//=
//addable
template <Addable Tp> // constrain Tp to addable types
struct Handler<Tp>
{
Handler()
{
std::cout << "Handler for types supporting operator+\n";
}
};
//=
//use
int main()
{
Handler<std::vector<int>>{}; // generic
Handler<int>{}; // specialized
}
//=
|