以下に示す定義では、G++ (4.7.2) を呼び出しqget<0>()
たり使用したりできますが、「より高い」はエラーで失敗します。一方、Clang++ (3.2) は、それらのいずれでも失敗します。私は最後の手段として、怠惰なenable_if を使用しました。私はそれを必要とすべきではないと思いますが。コードが少し奇妙に見えることはわかっていますが、エラーの原因を特定できる人はいますか? (Boost は enable_if クラスを提供します。)qget<1>()
qget<2>
no matching function
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>(); }