Действительно ли в C ++ есть typedef для примитивного типа к другому примитивному типу?
typedef int long;
На VS 2012 предупреждение выдается, но компилируется нормально.
предупреждение C4091: ‘typedef’: игнорируется слева от ‘long’, когда переменная не объявлена
Но на gcc-4.3.4 это терпит неудачу.
ошибка: объявление ничего не объявляет.
Какой компилятор соответствует стандарту?
PS: я не буду писать что-то подобное в рабочем коде. Просто придумал мысль и проверил.
Это действительно C ++
№ C ++ 11, § 7.1.3.6:
В заданной области видимости спецификатор типа не должен использоваться для переопределения имени любого типа, объявленного в этой области, для ссылки на другой тип.
Они оба говорят одно и то же, но один сообщает об этом как об ошибке. Обратите внимание, что предупреждение VS гласит «typedef был проигнорирован». Дело в том, что int long
а также long int
являются синонимами, так что вы в основном создаете неназванный typedef
к long
,
Оба делают то, что требует стандарт. Этот typedef недопустим, и оба компилятора выдают диагностику.