]> granicus.if.org Git - clang/commit
[c++17] Implement P0522R0 as written. This allows a template template argument
authorRichard Smith <richard-llvm@metafoo.co.uk>
Sat, 31 Dec 2016 21:41:23 +0000 (21:41 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Sat, 31 Dec 2016 21:41:23 +0000 (21:41 +0000)
commit2faed1c47d6990ad982c8fab2e16b86612a6e068
tree3a0899a9f281d96c82e218b0c4099abd1eeb1062
parent021fcf99fa531ede83709ea6efa6dcef9e9690de
[c++17] Implement P0522R0 as written. This allows a template template argument
to be specified for a template template parameter whenever the parameter is at
least as specialized as the argument (when there's an obvious and correct
mapping from uses of the parameter to uses of the argument). For example, a
template with more parameters can be passed to a template template parameter
with fewer, if those trailing parameters have default arguments.

This is disabled by default, despite being a DR resolution, as it's fairly
broken in its current state: there are no partial ordering rules to cope with
template template parameters that have different parameter lists, meaning that
code that attempts to decompose template-ids based on arity can hit unavoidable
ambiguity issues.

The diagnostics produced on a non-matching argument are also pretty bad right
now, but I aim to improve them in a subsequent commit.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290792 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Basic/LangOptions.def
include/clang/Driver/Options.td
include/clang/Sema/Sema.h
lib/Driver/Tools.cpp
lib/Frontend/CompilerInvocation.cpp
lib/Sema/SemaTemplate.cpp
lib/Sema/SemaTemplateDeduction.cpp
test/SemaTemplate/temp_arg_template.cpp
test/SemaTemplate/temp_arg_template_cxx1z.cpp [new file with mode: 0644]
www/cxx_status.html