Устаревание 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]
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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