typedef — тип примитива к типу примитива

Действительно ли в C ++ есть typedef для примитивного типа к другому примитивному типу?

typedef int long;

На VS 2012 предупреждение выдается, но компилируется нормально.

предупреждение C4091: ‘typedef’: игнорируется слева от ‘long’, когда переменная не объявлена

Но на gcc-4.3.4 это терпит неудачу.

ошибка: объявление ничего не объявляет.

Какой компилятор соответствует стандарту?

PS: я не буду писать что-то подобное в рабочем коде. Просто придумал мысль и проверил.

1

Решение

Это действительно C ++

№ C ++ 11, § 7.1.3.6:

В заданной области видимости спецификатор типа не должен использоваться для переопределения имени любого типа, объявленного в этой области, для ссылки на другой тип.

7

Другие решения

Они оба говорят одно и то же, но один сообщает об этом как об ошибке. Обратите внимание, что предупреждение VS гласит «typedef был проигнорирован». Дело в том, что int long а также long int являются синонимами, так что вы в основном создаете неназванный typedef к long,

5

Оба делают то, что требует стандарт. Этот typedef недопустим, и оба компилятора выдают диагностику.

2
По вопросам рекламы [email protected]