Constructor inheritance for class derived from template class in visual studio 2015 rc
根据msvs2015rc的页面,应该支持新特性构造器继承。是的,它适用于这样的简单情况:
1 2 3 4 5 6 | struct B { B(int) {} }; struct D : B { using B::B; // now we can create D object with B's constructor }; |
但如果我尝试创建更复杂的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | template <class T> struct B { B(int) {} }; template <template <class> class C, class T> struct D : C< T > { using C< T >::C; }; int main() { D<B,int> d(42); return 0; } |
我遇到了编译器错误:
-
error C2039: 'C': is not a member of 'B<T>' -
error C2873: 'C': symbol cannot be used in a using-declaration -
error C2664: 'D<B,int>::D(D<B,int> &&)': cannot convert argument 1 from 'int' to 'const D<B,int> &'
当且仅当将模板模板类
时,我才能消除这些错误
1 2 3 4 5 | template <template <class> class B, class T> struct D : B< T > { using B< T >::B; }; |
我认为这是一个编译器错误,因为所有这些代码都使用 gcc/clang 编译得很好。
有人对这个问题有其他看法吗?
这是 MSVC 中的一个错误,它也出现在他们在线提供的最新版本中。所以,请提交错误报告。相关讨论可以在其他 SO question 中找到。它包含一些标准的摘录,解释了为什么它应该起作用。