【发布时间】:2021-11-12 10:06:57
【问题描述】:
考虑:
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>) 更专业?
【问题讨论】:
标签: c++ overload-resolution function-templates-overloading