Я написал простой C++ 11 программа, в которой я создаю класс, который является производным от std::vector
:Почему один из моих конструкторов базового класса удален? (C++ 11)
#include <vector>
using namespace std;
template <typename T>
class my_vec : public vector<T> {
public:
using vector<T>::vector;
};
int main() {
my_vec<int> v0;
my_vec<int> v1 { 1, 2, 3, 4, 5 };
my_vec<int> v2 (42);
my_vec<int> v3 (v1);
my_vec<int> v4 (v1.begin()+1, v1.end()-1);
return 0;
}
my_vec
Предоставленный, не делает ничего сверх std::vector
, но это потому что я удалил все свои дополнительные функции в сужении моей ошибки. Эта программа отлично компилируется на г ++ 4.8.1 на Linux, но при использовании лязг 500.2.79 на OS X, это дает мне следующую ошибку:
myvec.cpp:16:15: error: call to deleted constructor of 'my_vec<int>'
my_vec<int> v4 (v1.begin()+1, v1.end()-1);
^ ~~~~~~~~~~~~~~~~~~~~~~~~
myvec.cpp:8:20: note: function has been explicitly marked deleted here
using vector<T>::vector;
^
1 error generated.
Почему лязг настоять, что диапазон конструктора std::vector
«s был удален ? Все остальные конструкторы, похоже, были унаследованы просто отлично.
[Скомпилирует для меня] (http://ideone.com/wTNQrN) – user3286380
Мой 'clang' делает то же самое, и я уверен, что это потому, что они являются шаблонами-конструкторами. Я должен был бы погрузиться в документы, чтобы узнать, является ли это ошибкой или стандартным. – WhozCraig
Имейте в виду, что 'std :: vector' не имеет виртуального деструктора и не предназначен для использования в качестве базового класса. –