// Contributed by Dodji Seketeli <dodji@redhat.com>
// Origin PR c++/42225
// { dg-do compile { target c++11 } }

template<class T>
struct A
{
    typedef T I;
    static const char *i;
};

template<class T, int>
struct B
{
    typedef T TT;
    typedef decltype(TT::i)  TT_I0;
    typedef decltype(&TT::i) TT_I1;
    typedef decltype(*TT::i) TT_I2;
    typedef A<TT_I0> TA0;
    typedef A<TT_I1> TA1;
    typedef A<TT_I2> TA2;
};

template<class T>
void
foo()
{
    typedef T TT;
    typedef decltype(TT::i)  TT_I0;
    typedef decltype(&TT::i) TT_I1;
    typedef decltype(*TT::i) TT_I2;
    typedef A<TT_I0> TA0;
    typedef A<TT_I1> TA1;
    typedef A<TT_I2> TA2;
}

int
main()
{
    foo<A<int> >();
}

