考虑:
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;
}
为什么qwe(TypeFlag<T>,TypeFlag<T*>)
比更专业qwe(TypeFlag<T>,TypeFlag<F>)
,而void asd(SizeFlag <START>, SizeFlag<START + 1>)
不是更专业void asd(SizeFlag<START>, SizeFlag<END>)
?