将功能专门化用于此目的是不可能的;我想你的意思是超载。您可以通过提供第二个过载来解决此问题:
template<std::integral First, std::integral Second>
void calculate(std::pair<First, Second> range) { /* do something */ }
或者,如果你坚持使用一个概念:
template <typename T>
concept integral_pair = requires (T pair) {
[]<std::integral First, std::integral Second>(std::pair<First, Second>){}(pair);
};
void calculate(integral_pair auto range) { /* do something */ }
这个
requires
表达式使用立即调用的lambda表达式(IILE)来确保
First
和
Second
可以从
pair
.