2015-07-13 13 views
5

Überlegen Sie, ich erben von einer Variadic-Vorlage die gesamte Liste der Argumente. Wie werden die Argumente vererbt?Sichtbarkeitsregeln für Mixin-Vererbung mit Variadic-Vorlage

Ich versuchte es, und es scheint alleR in der Öffentlichkeit vererbt werden (nicht nur die erste). Ist das definiertes Verhalten?

Ich versuchte es mit gcc und msvc (dank jaggedSpire auch mit clang), alle mit den gleichen Ergebnissen. Die Compiler haben keine Warnungen erwähnt. Sie können ein laufendes Beispiel here sehen.

+0

Ich halte dies für erwartet. Ich bin mir jedoch nicht sicher, was der Standard dazu sagt, wenn überhaupt. – celticminstrel

+1

Es funktioniert auch mit [clang] (http://coliru.stacked-crooked.com/a/053fcb6bdda23235). – jaggedSpire

Antwort

4

Ja, das ist das definierte Verhalten. Zitiert aus 14.5.3[temp.variadic]\4

A Packung Expansion besteht aus einem Mustern und ein Auslassungszeichen, die Instanziierung davon erzeugt null oder mehr Instanziierungen des Musters in einer Liste (unten beschrieben). Die Form des Musters hängt vom Kontext in ab, in dem die Erweiterung stattfindet. Pack Expansionen können in folgenden Zusammenhängen auftreten:

relevanter Kontext aus dieser Liste ist:

- In einer base-Spezifizierer-Liste (Ziffer 10); Das Muster ist ein Basis-Spezifizierer.

Somit wird in dem Parameterpaket Expansions class foo : public R..., ist das Muster der basen Spezifiziererpublic R, die Packung von Arten zusammengesetzt machen T1, T2, ... , Tn zu public T1, public T2, ... , public Tn erweitern. (Ellipsen im vorhergehenden Satz werden in dem die mathematische Sequenz spezifizierenden Sinn verwendet.)

+0

genau das, was ich gesucht habe. Danke – user1810087