Я хочу явно уничтожить вектор
в шаблонном контексте. У меня работает следующее (GNU C ++ 4.3, 4.4 и Clang ++ 1.1):
template <typename T>
void destroy_vector_owner(VectorOwner<T> *obj)
{
obj->v.~vector();
// further cleanup by Python API functions omitted
}
в то время как он не работает в Mac OS X v10.5 g ++
( i686-apple-darwin10-gcc-4.2.1
) с
expected class-name before ‘(’ token
Если я изменю его на
obj->v.~vector<T>();
код не компилируется с G ++, но Clang все еще может с этим справиться. Какая идиома правильная? Известно ли, что какой-либо из этих компиляторов не работает в этом отношении?
Обновление : определение VectorOwner
is
template <typename T>
struct VectorOwner {
PyObject_HEAD
std::vector<T> v;
};
Это объект Python, который должен поддерживать жизнь std :: vector
. Я признаю, что конструкция немного опасна, но мне нужно компактное хранилище, амортизируемое O (1) push_back
и возможность украсть содержимое другого вектора с помощью члена swap
.