【发布时间】:2017-12-17 10:33:17
【问题描述】:
我尝试在派生类中使用基类 typedef 作为返回类型。
template <typename T>
class Base{
public:
typedef size_t size_type;
virtual size_type size() = 0;
};
template <typename T>
class Derived : public Base<T> {
public:
using typename Base<T>::size_type;
virtual size_type size();
};
template <typename T>
typename Derived<T>::size_type Derived<T>::size() {
return 1;
}
clang 可以编译代码,而 msvc 不能。编译器说“大小的定义与其声明不匹配”。
我修改代码:
template <typename T>
typename Base<T>::size_type Derived<T>::size() {
return 1;
}
情况正好相反。
我认为typename Base<T>::size_type 更有意义,因为在基类中声明的虚函数也使用基类 typedef。但铿锵不允许。
如果我必须使用 out-of-class 定义,如何修改代码以使其被两个编译器编译?
【问题讨论】:
-
什么编译器版本?我有VS2017,它编译代码没有问题。
-
@BoPersson 也是 VS2017。我收到错误 C2244。
标签: c++