【发布时间】:2012-10-02 23:14:46
【问题描述】:
使用下面显示的定义,我可以使用 G++ (4.7.2) 调用 qget<0>() 或 qget<1>(),但 qget<2> 或“更高”将失败并出现 no matching function 错误。同时,Clang++ (3.2) 中的任何一个都失败了。我使用 lazy enable_if 作为最后的手段;虽然我不认为我应该需要它。我知道代码看起来有点奇怪,但是任何人都可以看到错误的来源吗? (Boost 提供了 enable_if 类。)
template <typename T> struct Tid { typedef T type; };
template <unsigned I>
typename enable_if_c<(I==0),double>::type
qget()
{ return 0.0; }
template <unsigned I>
typename lazy_enable_if_c<(I!=0), Tid<decltype(qget<I-1>())>>::type
qget()
{ return qget<I-1>(); }
【问题讨论】:
标签: c++ templates c++11 sfinae enable-if