[英]Why is one of my base class constructors deleted? (C++11)
我编写了一个简单的C ++ 11程序,在其中创建了一个从std::vector
派生的类:
#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
之上并没有做任何事情,但这是因为我删除了所有缩小我的错误的额外功能。 该程序在Linux上的g ++ 4.8.1上可以正常编译,但是在OS X上使用clang 500.2.79时,出现以下错误:
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.
为什么clang坚持std::vector
的范围构造函数已被删除? 所有其他构造函数似乎都已经继承了。
范围构造器不是常规方法,而是模板方法,这可能与事实有关。
template< class InputIt >
vector( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );
您的OS X编译器基于llvm clang-3.3(在Google上进行了检查),从此站点http://clang.llvm.org/cxx_status.html看来,继承构造函数应该在3.3版中可用,但看起来像在此版本中,实现是错误的。
我用clang 3.5检查了ubuntu,示例代码可以正常编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.