Компиляция следующего кода дает «неопределенную ссылку на« A :: ~ A () »:
#include <cstdlib>
#include <memory>
template <typename T>
struct A {
A() {}
~A() {}
};
struct Aggregate {
using key_vector = A<char>;
using value_vector = A<int>;
value_vector vals;
key_vector keys;
};
int
main()
{
auto x = malloc(sizeof(Aggregate));
new (x) Aggregate{};
return 0;
}
проблема присутствует в clang 7.0 и 6.0 (возможно, также в некоторых версиях oolder). См .: https://godbolt.org/z/GNPk3V
На новых версиях clang и на gcc все работает нормально.
Это ожидаемое или это какая-то ошибка в clang?