派生クラスで戻り値の型として基本クラスのtypedefを使用しようとしています。派生クラスで基本クラスの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;
}
msvcはコードをコンパイルできません。コンパイラは「サイズの定義が宣言と一致しません」と述べています。
私は、コードを変更:
template <typename T>
typename Base<T>::size_type Derived<T>::size() {
return 1;
}
状況は反対です。
私は、typename Base<T>::size_type
は、基本クラスで宣言された仮想関数も基本クラスのtypedefを使用しているので、もっと意味があると思います。しかし、clangは許されない。
クラスの定義を使用する必要がある場合、両方のコンパイラでコンパイルするようにコードを変更するにはどうすればよいですか?
コンパイラのバージョンは?私はVS2017を持っており、問題なくコードをコンパイルします。 –
@BoPerssonまたVS2017。私はエラーC2244を得た。 – CppLucifer