没有从“std :: allocator”转换为“const allocator_type”

时间:2014-08-11 19:58:21

标签: c++ c++11 gcc clang++ icc

我正在尝试在C ++ 11中实现一个与MKL一起使用的对齐分配器。我有:

template <typename T, size_t TALIGN = 16, size_t TBLOCK = 4>
class aligned_allocator : public std::allocator<T>
{
    typedef typename std::allocator<T>::pointer pointer;
    typedef typename std::allocator<T>::size_type size_type;
public:
    pointer allocate(size_type n, const void *hint = nullptr);
    void deallocate(pointer p, size_type n);
};

在其他地方,我有:

template<typename T> using aligned_vector = std::vector<T, aligned_allocator<T>>;

最后,我有这个运算符重载:

inline aligned_vector<double> operator+(aligned_vector<double> x, aligned_vector<double> y)
{
    aligned_vector<double> z(x.size());
    vdAdd(x.size(), x.data(), y.data(), z.data());
    return z;
}

这一切都在iccclang下完全编译和运行,但是对于GCC 4.9,它不会编译,除非我使xy同时引用。为什么海湾合作委员会要求其他人不这样做?

1 个答案:

答案 0 :(得分:1)

您错过了rebind

template <typename U> struct rebind { typedef aligned_allocator<U> other; };

那就是说,你不应该继承std::allocatorWhy not to inherit from std::allocator