4

テンプレート エイリアスが与えられた場合

template<unsigned U>
using uint_ = integral_constant<unsigned,U>;

の部分的な専門化

template<class T,class P>
struct size{};

なので

template <class T,unsigned U>
struct size<T,uint_<U>>{};

gcc 4.7 では警告は生成template parameter can not be deducedされませんが、clang 3.1 では警告が生成されます

それで、それは不正なコードですか?

4

2 に答える 2

5

コードは C++11 で完全に問題ありません。Clang の警告は無視できます。

于 2012-08-28T10:58:28.963 に答える
3

別の人は、これは Clang のバグだと言いました。このように using 宣言を変更すると、回避できます。

template<unsigned T, unsigned U = T>
using uint_ = integral_constant<unsigned,U>;

経験に基づいた推測として、どうやら Clang は type-id に表示されるテンプレート パラメーターの ID を正しく更新しないようです。uint_<U>したがって、あなたの例では、結果の型が部分的な特殊化の最初のパラメーターを参照していると考えられます(その中uint_ではそうですが、使用点ではそうではないため)。または、使用場所で注文を交換できます

template <unsigned U,class T>
struct size<T,uint_<U>>{};
于 2012-08-28T20:29:06.090 に答える