Почему этот дружественный класс не может получить доступ к частному конструктору перемещения?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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