Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2014
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.80 KB | None | 0 0
  1. template<class T1>
  2. struct A
  3. {
  4. template<class T2>
  5. struct B
  6. {
  7. static B f;
  8. static typename A<T2>::template B<T1> g;
  9. };
  10. };
  11.  
  12. template<class T1>
  13. template<class T2>
  14. typename A<T2>::template B<T1> // ok, typename/template required
  15. A<T1>::B<T2>::g;
  16.  
  17. template<class T1>
  18. template<class T2>
  19. A<T1>::B<T2> // clang/gcc accept, msvc rejects missing typename
  20. A<T1>::B<T2>::f;
  21.  
  22. template<class T1>
  23. struct C
  24. {
  25. template<class T2>
  26. struct D
  27. {
  28. static typename A<T1>::template B<T2> f;
  29. static typename A<T1>::template B<T2> g;
  30. };
  31. };
  32.  
  33. template<class T1>
  34. template<class T2>
  35. typename A<T1>::template B<T2> // ok, typename/template required
  36. C<T1>::D<T2>::f;
  37.  
  38. template<class T1>
  39. template<class T2>
  40. A<T1>::B<T2> // clang rejects with incorrect error
  41. C<T1>::D<T2>::g;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement