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>>{};

生成与template parameter can not be deducedclang 3.1 相同的警告,而 gcc 4.7 不生成警告

那么,它是格式错误的代码吗?

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 中的模板参数的标识。所以它认为在你的例子中,结果类型uint_<U>是指部分专业化的第一个参数(因为在uint_这种情况下,但不是在使用点)。或者,您可以在使用点更换订单

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