ich etwas nicht einverstanden mit der Sprache lawyering sehen in andere Antworten, also habe ich beschlossen, mein eigenes zu schreiben.
Kurz gesagt, Sie können template <typename T> using Point = struct {T x, y;};
aus dem gleichen Grund nicht verwenden, den Sie template <typename T> struct {T x, y;};
nicht verwenden können.
Alias Vorlage ist immer noch eine Vorlage. Und obwohl der Standard dies nicht explizit angibt, impliziert dies, dass eine Vorlage einen Namen haben sollte (siehe [temp]/4 - Ein Vorlagenname hat eine Verknüpfung ...). Welche Sie nicht zur Verfügung stellen.
Also nein, Sie können das Problem nicht lösen, ohne einen Namen anzugeben. Sie können aber auch nicht einfach einen Namen in eine Alias-Deklaration schreiben: template <typename T> using Point = struct P {T x, y;};
. Der Standard verbietet dies explizit ([dcl.typedef]/2 - Der defining-type-specifier-seq der defining-type-ID darf keine Klasse oder Enumeration definieren).
Das einzige, was Sie so etwas wie dies aussehen kann:
template <typename T>
struct Point {T x, y;};
template <typename T>
using PointAlias = Point<T>;
die, wie Sie sehen können, ist sinnlos (es sei denn, natürlich, Ihre Point
mehrere Template-Argumente übernimmt, in diesem Fall, Sie kann eine nette Alias-Vorlage machen).
So Stick mit einfachen template <typename T> struct Point {T x, y;};
. Es macht genau dasselbe wie Ihre "vorgeschlagene" Syntax.
aber ... aber warum ... warum würdest du das überhaupt machen wollen? Sogar dein ursprünglicher 'typedef' ist sinnlos (der Name ist leicht ironisch). –