template <class T>
struct A {
  typename T::DT i;
};

#if !defined(DoNotConfuseMSVisual)
 template <class T>
 typename T::DT foo(const A<T> &a);
#endif

template <class T>
typename T::DT foo(const A<T> &a) {
  return a.i+a.i;
};
 
struct DTdef {
  typedef long DT;
};
 
int main() {
  A<DTdef> a;
  a.i=7;
  return foo(a)-14;
}
