Каков ожидаемый результат для std::is_constructible
для типа с закрытым или защищенным деструктором?
Например, я все еще могу построить такой объект в куче, даже если только друг может его освободить:
#include <type_traits>
class Foo
{
friend void freeFoo(Foo*);
public:
Foo()
{}
private:
// Destructor is private!
~Foo()
{}
};
void freeFoo(Foo* f)
{
delete f; // deleting a foo is fine here because of friendship
}
int main()
{
Foo* f = new Foo();
// delete f; // won't compile: ~Foo is private
freeFoo(f); // fine because of friendship
if(!std::is_constructible<Foo>::value)
{
std::cout << "is_constructible failed" << std::endl;
}
}
Окончательная проверка для is_constructible
завершится неудачей как на gcc, так и на Visual С++ (gcc demo on coliru).
Это обязательное поведение по стандарту? Если да, есть ли способ проверить, имеет ли тип определенный конструктор, независимо от спецификатора доступа на деструкторе?