Typedef анонимного класса

Есть ли какая-либо разница в любом аспекте (синтаксическое ограничение, производительность и т.д.) между двумя следующими определениями?

using Foo = struct { int a, b, c; };

struct Foo { int a, b, c; };

(Я спрашиваю, потому что первая форма является эстетически более однородной, когда помещается в много объявлений using.)

EDIT: Сообщение, связанное с комментарием, точно не отвечает на мой вопрос. Меня больше беспокоит то, как эти два определения различаются в плане использования, тогда как этот пост в основном отвечает на то, как они отличаются друг от друга, ну, что они собой представляют, я думаю.

Ответ 1

Вот некоторые отличия, которые я могу придумать:

  • (очевидно) Вы не можете объявить какие-либо конструкторы, деструктор или оператор присваивания для неназванного класса.
  • Вы не можете переадресовать объявить неназванный класс, в том числе в качестве друга другого класса.
  • Вы не можете отметить неназванный класс final.
  • struct Foo может быть объявлен в той же декларативной области, что и функция или переменная с именем Foo, хотя, очевидно, вы не должны этого делать. using Foo = ... не позволяет вам эту свободу.