Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template<class T1>
- struct A
- {
- template<class T2>
- struct B
- {
- static B f;
- static typename A<T2>::template B<T1> g;
- };
- };
- template<class T1>
- template<class T2>
- typename A<T2>::template B<T1> // ok, typename/template required
- A<T1>::B<T2>::g;
- template<class T1>
- template<class T2>
- A<T1>::B<T2> // clang/gcc accept, msvc rejects missing typename
- A<T1>::B<T2>::f;
- template<class T1>
- struct C
- {
- template<class T2>
- struct D
- {
- static typename A<T1>::template B<T2> f;
- static typename A<T1>::template B<T2> g;
- };
- };
- template<class T1>
- template<class T2>
- typename A<T1>::template B<T2> // ok, typename/template required
- C<T1>::D<T2>::f;
- template<class T1>
- template<class T2>
- A<T1>::B<T2> // clang rejects with incorrect error
- C<T1>::D<T2>::g;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement