GCC で __m128i をキャッシュ整列ベクトルの値の型として使用しようとしていますが、次のエラーが発生します。
/usr/include/tbb/cache_aligned_allocator.h:105:32: エラー: '* p' のメンバー '~tbb::cache_aligned_allocator<__vector(2) long long int>::value_type' の要求。クラス型 'tbb::cache_aligned_allocator<__vector(2) long long int>::value_type {aka __vector(2) long long int}'</p>
コンパイラは、tbb/cache_aligned_allocator.h の次の行までトレースします。
void destroy( pointer p ) {p->~value_type();}
コンパイラ エラーをトリガーするコードは次のとおりです。
#include <vector>
#include <emmintrin.h>
#include <tbb/cache_aligned_allocator.h>
int main()
{
std::vector<int, tbb::cache_aligned_allocator<int> > success;
std::vector<__m128i, tbb::cache_aligned_allocator<__m128i> > failure;
return 0;
}
Debian のバージョン管理によると、私の GCC バージョンは 4.6.1-2 で、TBB バージョンは 3.0+r147-1 です。これは Threading Building Blocks のバグですか、それとも何かを間違って使用していますか?