Подружиться с другими экземплярами шаблона класса с помощью STD: Параметр массива не удастся на MSVCC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Подружиться с другими экземплярами шаблона класса с помощью STD: Параметр массива не удастся на MSVC

Сообщение Anonymous »

У меня есть шаблон класса, который принимает std :: ray как параметр. Я хочу иметь возможность преобразовать объекты одного экземпляра шаблона в другой экземпляр шаблона. Чтобы выполнить работу по вычету шаблона, а не сталкиваться с конструктором движения, я попытался реализовать преобразование с помощью шаблона функции статического члена, который принимает объект другого типа и возвращает объект типа, которым является функция. Мне также необходимо поднять экземпляры шаблона класса друзей друг с другом, чтобы функция преобразования могла получить доступ к частным членам пропущенного объекта.

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

#include 
#include 
#include 

template 
class A {
public:
template 
friend class A;

template 
static A fromOther(A&& other);

private:
int x;
};

template 
template 
A A::fromOther(A&& other) {
A a;
a.x = other.x;
return a;
}

int main() {
using B = A;
B b = B::fromOther(A());
}
< /code>
MSVC сообщает о нескольких ошибках, начиная с: < /p>
8: error C3855: 'A' template parameter 'U2' is incompatible with the declaration 'T2'
Если я изменю тип параметра второго шаблона на size_t , программа компилирует. Если я вместо этого сделаю функцию элемента не тем-тремлат, изменяя тип параметра функции на конкретный экземпляр шаблона класса, программа также компилирует.
Я также попытался изменить объявление друга, чтобы подружиться с функцией члена: < /p>
template
template
friend A A::fromOther(A&&);
< /code>
Это не создает ошибки в объявлении друга, но переменная частного участника все еще недоступна.
Все варианты, которые я пробовал, работают с GCC, так что мне интересно, является ли это ошибкой в MSVC и как я могу обойти его. < /P.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ils-on-msv
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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