Унификация синтаксиса forward declaration для типов, ослабление текущих ограничений

Alexander Furmenkov
Alexander Furmenkov

Проблемы:

1. На данный момент делая forward declaration мы вынуждены угадывать обьявлен ли типо как class или struct, хотя явных причин для данного требования в контексте форварда мне обнаружить не удалось (есть ощущение рудиментарности).

2. Мы не можем сделать forward declaration для typedef и using алиаса типа. Причину данного ограничения мне также не удалось обнаружить, возможно оно напрямую связано с п.1

 

Возможное решение.

Для поддержания обратной совместимости добавить возможность вроде:

extern_type Type; // Универсальный forward declaration для struct/class/union и иных сущностей включая алиасы, объявляет не полный тип Type, на который разрешены ссылки и указатели. 

 

0
рейтинг
3 комментария
Sasha Sitnikov

Хорошая идея! Чтобы не вводить лишнее слово, я бы предложил синтаксис: using extern Type;

Sasha Sitnikov
Andrey

1. Это не правда, или я Вас не так понял, такой код -- валидный.

struct X;
class X {};

2. Компилятор должен уметь сравнивать типы

extern_type A;
struct B;

template<typename>
struct X {};

X<A> x1; // #1
X<B> x2; // #2

using A = B;
X<A> x3; // #3

В точках #1, #2 и #3 это должна быть одна и та же инстанциация X

Andrey
Antervis

2. Мы не можем сделать forward declaration для typedef и using алиаса типа. 

using MyAlias = class MyType;

 

Antervis
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения