给定模板别名
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>>{};
为clang 3.1生成template parameter can not be deduced
警告,而gcc 4.7没有生成警告
那么,代码是否格式错误?
答案 0 :(得分:5)
C ++ 11中的代码非常好。 Clang的警告可以忽略不计。
答案 1 :(得分:3)
另一个人说这是一个Clang bug。如果你改变像这样的使用声明
,你可以解决它template<unsigned T, unsigned U = T>
using uint_ = integral_constant<unsigned,U>;
作为一个有根据的猜测,显然Clang没有正确更新type-id中出现的模板参数的身份。因此,在您的示例中,它认为结果类型uint_<U>
引用了部分特化的第一个参数(因为在uint_
内是这种情况,但不是在使用点)。或者,您可以在使用地点交换订单
template <unsigned U,class T>
struct size<T,uint_<U>>{};