使用下面显示的定义,我可以调用qget<0>()
或qget<1>()
使用 G++ (4.7.2),但qget<2>
或“更高”将失败并出现no matching function
错误。同时,Clang++ (3.2) 中的任何一个都失败了。我使用了惰性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>(); }