【发布时间】:2011-12-06 09:31:10
【问题描述】:
template<typename T>
struct Wrap {
Wrap(T *p) {}
};
#ifdef TEMPLATE
template<typename T>
void foo (Wrap<T> t) {} // version-1
#else
void foo (Wrap<int> p) {} // version-2
#endif
int main () {
foo(new int);
}
编译#else 部分时,编译正常并选择了version-2。如果我尝试编译 #ifdef 部分,我希望应该选择 version-1。但是编译器给出了错误,
错误:没有匹配的函数调用 `foo(int*)'
我是否触及了template foo 的不可演绎部分?如果是,那么任何人都可以澄清 non-deducible 区域的确切规则是什么?
【问题讨论】: