llvm-project/clang/test/CXX/temp/temp.fct.spec/temp.deduct
Douglas Gregor 4afc236cee When instantiating a function type, instantiate the return type before
instantiating the parameters. In a perfect world, this wouldn't
matter, and compilers are free to instantiate in any order they
want. However, every other compiler seems to instantiate the return
type first, and some code (in this case, Boost.Polygon) depends on
this and SFINAE to avoid instantiating something that shouldn't be
instantiated.

We could fight this battle, and insist that Clang is allowed to do
what it does, but it's not beneficial: it's more predictable to
instantiate this way, in source order. When we implement
late-specified return types, we'll need to instantiate the return type
last when it was late-specified, hence the FIXME.

We now compile Boost.Polygon properly.

llvm-svn: 112561
2010-08-31 00:26:14 +00:00
..
temp.deduct.call Perform the function-to-pointer adjustment during template argument 2010-08-30 21:04:23 +00:00
temp.deduct.conv Update tests to use %clang_cc1 instead of 'clang-cc' or 'clang -cc1'. 2009-12-15 20:14:24 +00:00
temp.deduct.funcaddr Update tests to use %clang_cc1 instead of 'clang-cc' or 'clang -cc1'. 2009-12-15 20:14:24 +00:00
temp.deduct.partial Update tests to use %clang_cc1 instead of 'clang-cc' or 'clang -cc1'. 2009-12-15 20:14:24 +00:00
temp.deduct.type When printing an overload candidate that failed due to SFINAE, print a 2010-05-08 20:07:26 +00:00
p9.cpp Add tests for PR6707. 2010-03-26 05:57:46 +00:00
sfinae-1.cpp When instantiating a function type, instantiate the return type before 2010-08-31 00:26:14 +00:00