Author: Richard Smith Date: 2021-05-11T17:35:34-07:00 New Revision: 3978333b71bff3516ad69aac484b808617976c7a
URL: https://github.com/llvm/llvm-project/commit/3978333b71bff3516ad69aac484b808617976c7a DIFF: https://github.com/llvm/llvm-project/commit/3978333b71bff3516ad69aac484b808617976c7a.diff LOG: Add test for PR50039. I believe Clang's behavior is correct according to the standard here, but this is an unusual situation for which we had no test coverage, so I'm adding some. Added: Modified: clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp Removed: ################################################################################ diff --git a/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp b/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp index c42fda780430..ad9cfc7cdd9d 100644 --- a/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp +++ b/clang/test/SemaTemplate/temp_arg_nontype_cxx20.cpp @@ -292,3 +292,16 @@ namespace Predefined { Y<B{__func__[0]}>(); // expected-error {{reference to subobject of predefined '__func__' variable}} } } + +namespace DependentCTAD { + template<auto> struct A {}; + template<template<typename> typename T, T V> void f(A<V>); // expected-note {{couldn't infer template argument 'T'}} + template<typename T> struct B { constexpr B(T) {} }; + + void g() { + // PR50039: Note that we could in principle deduce T here, but the language + // deduction rules don't support that. + f(A<B(0)>()); // expected-error {{no matching function}} + f<B>(A<B(0)>()); // OK + } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits