template <typename T>
struct id
{
typedef T type;
};
class S{
public:
template<typename T, int N>
operator typename id<T(&)[N]>::type ();
};
void f(int(&)[20]) {}
void g(S s) { cout << typeid(f(s)).name(); }
gcc编译总是错误: 错误:类型&#39; int(&amp;)[20]&#39;的引用无效初始化来自&#39; S&#39;
的表达为什么会失败?
答案 0 :(得分:3)
在typename id<T(&)[N]>::type
中,T
和N
位于非推断的上下文中。请改用别名模板:
template <typename T>
using id = T;
class S{
public:
template<typename T, int N>
operator id<T(&)[N]> ();
};