ฉันกำลังพยายามใช้ตัวจัดสรรที่สอดคล้องเพื่อใช้กับ MKL ใน C ++ 11 ฉันมี:
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;
}
ทั้งหมดนี้คอมไพล์และทำงานได้อย่างสมบูรณ์แบบภายใต้ทั้ง icc
และ clang
แต่ด้วย GCC 4.9 มันจะไม่คอมไพล์เว้นแต่ฉันจะสร้าง x
และ y
ทั้งสอง const-references เหตุใด GCC จึงต้องการสิ่งนี้ ในเมื่อที่อื่นไม่ต้องการ
rebind
ของคุณอยู่ที่ไหน? - person Cubbi   schedule 12.08.2014rebind
ไม่จำเป็นใน C ++ 11 - person Kerrek SB   schedule 12.08.2014