Почему этот дружественный класс не может получить доступ к частному конструктору перемещения?C++

Программы на C++. Форум разработчиков
Anonymous
Почему этот дружественный класс не может получить доступ к частному конструктору перемещения?

Сообщение Anonymous »

Я получаю сообщение об ошибке при статическом утверждении:

Код: Выделить всё

#include 

template 
class MyVector
{
public:
static_assert(std::is_move_constructible_v);
void emplace_back(element_t element) {}
};

class MyClass
{
friend class MyClassMngr;
friend class MyVector;

struct ConstructionKey {};
MyClass(ConstructionKey) {}

public:
MyClass(const MyClass&) = delete;

private:
MyClass(MyClass&&) = default;

};

class MyClassMngr
{
static inline MyVector my_classes;
};
Вот ссылка на Godbolt.
Пример ошибки (gcc):

Код: Выделить всё

:8:19: error: static assertion failed due to requirement 'std::is_move_constructible_v'
8 |     static_assert(std::is_move_constructible_v);
|                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:37:37: note: in instantiation of template class 'MyVector' requested here
37 |     static inline MyVector my_classes;
|
Это потому, что std::is_move_constructible_v не является другом MyClass? Если да, то стоит ли мне сделать его другом? Или мне просто сделать конструктор перемещения общедоступным? Я бы предпочел, чтобы это было конфиденциально.


Подробнее здесь: https://stackoverflow.com/questions/797 ... onstructor

Вернуться в «C++»