22 template<typename T
> struct C
: X
, T
{
24 using typename
T::type
;
29 template<typename T
> struct D
: X
, T
{
30 // Mismatch in type/non-type-ness.
31 using typename
T::value
;
37 #if __cplusplus <= 199711L // C++11 does not allow access declarations
38 template<typename T
> struct E
: X
, T
{
39 // Mismatch in using/access-declaration-ness.
45 template<typename T
> struct F
: X
, T
{
46 // Mismatch in nested-name-specifier.
48 using typename
T::Y::type
;
50 using typename ::X::t
;
53 // Force instantiation.
54 typedef C
<YB
>::type I
;
55 typedef D
<YBRev
>::t I
;
57 #if __cplusplus <= 199711L // C++11 does not allow access declarations
58 typedef E
<YB
>::type I
;
61 typedef F
<YB
>::type I
;
63 #if __cplusplus >= 201702L
64 template<typename
...T
> struct G
: T
... {
67 using Q
= decltype(G
<X
, Z
>());