Устаревание typedef не работает в GCC и MSVC (работает в Apple Clang), когда оно используется в качестве аргумента операC++

Программы на C++. Форум разработчиков
Anonymous
Устаревание typedef не работает в GCC и MSVC (работает в Apple Clang), когда оно используется в качестве аргумента опера

Сообщение Anonymous »

В нашем коде есть класс с псевдонимом (), и мы пытаемся исключить этот псевдоним. Мы не хотим объявлять устаревшим исходный класс (на самом деле класс с новым именем). Мы хотим объявить устаревшим только псевдоним (старое имя).
Спецификация C++14 указывает, что это должно быть очень просто:

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

[[deprecated]] typedef AliasName RealName;
Нас смутило то, что это работало у нас в Apple Clang (16), но не работало в GCC (8, 11) или MSVC (VS 2022). Затем, после долгих экспериментов, мы понимаем, что это не работает, потому что объект, созданный с псевдонимом, использовался в качестве аргумента оператора потока. Вот простейший код воспроизведения:

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

#include 
#include 

class Foo
{
public:
Foo(std::string const & name) : _name(name) {}
~Foo() {}

std::string _name;
};

std::ostream &
operator

Подробнее здесь: [url]https://stackoverflow.com/questions/79178968/deprecation-of-typedef-does-not-work-on-gcc-and-msvc-does-on-apple-clang-when[/url]

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