@rnk
  Yes - I think it is an MSVC-compatible change.  MSVC does allow trailing 
return types which is not an issue with templates in either delayed-parsing or 
non-delayed-parsing mode.  It is return type deduction that becomes the issue 
(i.e. the template must be instantiated to deduce its return type).  Your 
example below does not require return type deduction.

  The reason it errors when delayed-parsing is turned off has nothing to do 
with return type deduction (in delayed parsing mode all 
late-parsed-instantiations are parsed and instantiated at the end of the 
translation unit - so when foo is parsed at the end of the TU, bar can be 
found.  not so with eager template parsing).




  >> rnk wrote:
  Are you sure this is an MSVC-compatible change? MSVC allows late specified 
return types, and does so while delaying the parsing of the body. Consider this 
test case, which cl accepts and clang -fno-delayed-template-parsing rejects:

  extern "C" int puts(const char *s);
  template <typename T>
  auto foo(T x) -> decltype(x) {
    ::bar();
    return x;
  }
  void bar() { puts("bar"); }
  int main() { return foo(0); }

http://llvm-reviews.chandlerc.com/D2053
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to