2015-07-13 15 views
5

Rozważ, że dziedziczę po szablonie variadic całą listę argumentów. W jaki sposób dziedziczone są argumenty?Reguły widoczności dla dziedziczenia mixin za pomocą szablonu variadic

Próbowałem go i wydaje wszystkieR „s są dziedziczone publicznych (nie tylko pierwszy). Czy to zdefiniowane zachowanie?

Próbowałem go z gcc i msvc (dzięki jaggedSpire również z clang), wszystkie z takimi samymi wynikami. Kompilatory nawet nie wspomniały o żadnych ostrzeżeniach. Możesz zobaczyć działający przykład: here.

+0

Uważam to za oczekiwane. Jednak nie jestem pewien, co standard mówi, jeśli w ogóle. – celticminstrel

+1

Działa również z [clang] (http://coliru.stacked-crooked.com/a/053fcb6bdda23235). – jaggedSpire

Odpowiedz

4

Tak, to zdefiniowane zachowanie. Cytuje 14.5.3[temp.variadic]\4

ekspansji pakietu składa się wzór i elipsy, której instancji wytwarza zero lub więcej dawałaby wzoru na liście (opisane poniżej). Forma wzorca zależy od kontekstu w , w którym następuje rozwinięcie. ekspansje opakowań może wystąpić w następujących sytuacjach:

właściwego kontekstu z tej listy to:

- W base-specyfikującego liście (§ 10); wzorzec jest specyfikatorem bazowym .

Zatem w rozwoju parametr opakowanie class foo : public R..., wzór jest bazowego specyfikatorpublic R, dzięki czemu pakiet złożony z rodzajów T1, T2, ... , Tn rozwinąć do public T1, public T2, ... , public Tn. (Elipsa w poprzednim zdaniu jest używana w znaczeniu matematycznym określającym kolejność.)

+0

dokładnie to, czego szukałem. Dziękuję Ci – user1810087

Powiązane problemy