【发布时间】:2018-10-27 14:32:52
【问题描述】:
我们有两个模板类,Class1 有一个嵌套类。 Class2 需要从该嵌套类对象构造/转换。
template<typename T> struct Class1{
Class1() = default;
class Inner{};
};
template<typename T> struct Class2{
Class2() = default;
template<typename T2> Class2(const Class1<T2>&) {}
template<typename T2> Class2(const typename Class1<T2>::Inner&) {}
};
void foo(const Class2<int>&){}
...
Class1<int> c1;
Class1<int>::Inner i1;
foo( c1);
foo( i1); // <===================ERROR
错误文本是:
error: invalid initialization of reference of type ???const Class2<int>&??? from expression of type ???Class1<int>::Inner???
为什么会出现此错误?从Class1 构建有效。如果类不是模板,则从 Inner 构造也可以。
【问题讨论】:
标签: c++ templates reference inner-classes