Consider:
template <size_t >
class SizeFlag {};
template <size_t START, size_t END>
void asd(SizeFlag<START>, SizeFlag<END>) {
}
template <size_t START>
void asd(SizeFlag <START>, SizeFlag<START + 1>) {
}
template <class T>
class TypeFlag{};
template <class T,class F>
void qwe(TypeFlag<T>,TypeFlag<F>){}
template <class T>
void qwe(TypeFlag<T>,TypeFlag<T*>){}
int main()
{
asd(SizeFlag<1>{}, SizeFlag<2>{});// call to 'asd' is ambiguous in clang-11
qwe(TypeFlag<int>{}, TypeFlag<int*>{});// use void qwe(TypeFlag<T>,TypeFlag<T*>)
cout << "Hello CMake." << endl;
return 0;
}
Why is qwe(TypeFlag<T>,TypeFlag<T*>)
more specialized than qwe(TypeFlag<T>,TypeFlag<F>)
, but void asd(SizeFlag <START>, SizeFlag<START + 1>)
is not more specialized than void asd(SizeFlag<START>, SizeFlag<END>)
?