using a1 = decltype(bar());
using b1 = decltype(bar<int>());
using c1 = decltype(foo::bar<int>());
using d1 = decltype(*(bar<int>()));
using e1 = decltype(*(foo::bar<int>()));

using a2 = decltype(  bar  (  )  );
using b2 = decltype(  bar  <  int  >  (  )  );
using c2 = decltype(  foo::bar  <  int  >  (  )  );
using d2 = decltype(  *(  bar  <  int  >  (  )  )  );
using e2 = decltype(  *(  foo::bar  <  int  >  (  )  )  );

using a3 = decltype(  bar  (  0  )  );
using b3 = decltype(  bar  <  int  >  (  0  )  );
using c3 = decltype(  foo::bar  <  int  >  (  0  )  );
using d3 = decltype(  *(  bar  <  int  >  (  0  )  )  );
using e3 = decltype(  *(  foo::bar  <  int  >  (  0  )  )  );

using x1 = decltype((0));
using x2 = decltype(  (  0  )  );
