Рефакторинг шаблона неполного типа для визуальной студии - PullRequest
0 голосов
/ 18 октября 2018

Я написал некоторый код для назначения, который компилировался и вел себя как положено в gcc, но исключает C2027 «использование неопределенного типа» при компиляции в visual studio.Вот поведение, которое вызвало ошибку:

template<class Object>
class Foo{

public:
[....]

private: 
[....]

std::stack<Foo> bar;//error c2027 from instantiation with incomplete type
};

Я понимаю, почему происходит ошибка, я пытался выяснить, как ее устранить без существенного изменения структуры кода, илиесли это вообще возможноВ этом конкретном случае класс использовал внутреннюю структуру данных для хранения копии предыдущих состояний, к которой он мог быть возвращен.

1 Ответ

0 голосов
/ 18 октября 2018

Добавьте уровень косвенности:

struct FooData { /*...*/ };

struct Foo  {
    std::stack<FooData> bar;
}; 

Почему ваш код компилируется, см. здесь .В итоге: только некоторые контейнеры допускают неполные типы как value_type (начиная с C ++ 17), для других это неопределенное поведение (т.е. не требуется диагностика).Спасибо NathanOliver за ссылку!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...